Программа (Сервис) закрытия 1С в терминальных сессиях

Закрытие 1с в терминальных сессиях при разрыве связи или по таймауту завершения сессии, вызывает простое уничтожение процесса 1с. В связи с этим не сохраняются открытые на редактирование документы и программа завершается аварийно, что требует потом определенных мер по устранению таких сбоев, например переиндексация базы. Для закрытия 1с штатным образом используйте эту программу.

Работа в качестве сервиса:

Сервис каждые 30 сек. проверяет состояние терминальных сессий, и в случае когда состояние равно «Отключена» запускает в отключенной сессии «Close1s.exe» с ключом –close.

Close1s.exe с ключом –close имитирует работу пользователя по закрытию 1С, ищет процесс с именем 1cv7* или 1cv8* находит его окно, посылается команда закрытия окна 1С, если всплывают диалоги закрытия или о сохранении изменений в 1С, то на вопросы отвечается утвердительно «Да» , 1С завершает работу штатным методом. Если в течении 10 сек. так и не удалось завершить 1С (в случаях когда 1С зависла и не отвечает на действия пользователя) процесс  1С уничтожается.

 

Примеры использования программы «Close1s.exe»:

Для инсталляции сервиса можно скопировать «Close1s.exe» в папку C:WINDOWS,  затем выполнить команду инсталляции сервиса «Пуск» — «Выполнить»- «C:WINDOWS Close1s.exe -install». Сервис установится с именем «Закрытие 1С при отключении сессии».

Для удаления сервиса выполните команду «Пуск» — «Выполнить»- «C:WINDOWS Close1s.exe -uninstall».

Есть возможность использовать «Close1s.exe» не в качестве сервиса, а как программу (например для использования в своих скриптах или батниках, с ключом «-close»), для этого выполните команду «Пуск» — «Выполнить»- «C:WINDOWS Close1s.exe -close».

 

 

Дополнение, о настройках терминального сервера:

В настройке службы терминалов («Пуск» — «Все программы»-«Администрирование»-«Настройка служб терминалов» или «Пуск» — «Выполнить»- «%SystemRoot%system32 scc.msc /s»)  

 Настройка служб терминалов

В своиствах RDP-Tcp на закладке «Сеансы» поставить галочку «Заменить параметры пользователя», выбрать «Завершение отключенного сеанса» 1 мин. или больше, поставить галочку «Заменить параметры пользователя При превышении ограничений или разрыве подключения», выбрать  «Отключить сеанс».

 Свойства RDP

 

 Обновление:
+ добавлены настройки ini файл:
[options]
to_answer_the_question=1
interval_of_session_inactivity=0
wait_before_killing=10

описание параметров:
to_answer_the_question — отвечать на вопросы 1=Да, 0=Нет .
interval_of_session_inactivity — интервала неактивности отключонной сессии в минутах, если 0=сразу
wait_before_killing — ожидание в секундах перед уничтожением процеса 1С (если не смогли выключить).

+ Настройки ini файла лежащий рядом с exe действует на всех пользователей,
для индивидуальной настроки пользователей разместите ini файл в каталоге пользователя
например пользователю User: « C:Documents and SettingsUserClose1s.ini».

 

Обновление от 22.05.2013:

+ изменен алгоритм по кнопкам, теперь учитываются диалоговые окна:  «Да/Нет», « Ок/Отмена», «Ок» и т.д.

 

58 Comments

  1. yuraos

    ЭХ!

    ЛЮБЛЮ Я ЗАПИСЫВАТЬ ПЕРВЫЕ ПОСТЫ К СТАТЬЯМ!!!

    А ПОЧЕМУ ???

    —————————————————-

    А ПОТОМУ, ЧТО:

    1) Можно смайлов в пост без извратов навставлять.

    2) По спаму рассылаемому сайтом по мэйлу можно подумать — что Я АВТОР ПУБЛИКАЦИИ.

    —————————————————-

    а на будущее — изменять первый пост со смайлами не советую,

    красота проподает — смайлики не отображаются.

    😀 💡 ❓ ❗ 😉 👿 😳 :{} 😎 😮 🙁 🙂 😐

    Reply
  2. Loader_1C

    Автору, спасибо! нужная вещь.

    Reply
  3. yuraos

    Интересная фишка, спрошу своих админов — актульно или нет…

    А трудно еще добавить в службу выгонялку уюзеров из конкретной базы

    с выводом оповещений?

    Штатная выгонялка в типовых 1С не всегда хорошо работает и интерфейс у нее довольно поганенький.

    Reply
  4. CheBurator

    1. хочется иметь более гибко настраиваемый режим поведения

    — указание интервала неактивности сессии. например: 20 мин — если отключено менее указанного времени — ничего не делаем.

    — указание неактивности сессии как-то по разному для разных сессий/сеансов/пользователей 1С

    Reply
  5. kapustinag

    Действительно, нужная вещь.

    Но отвечать на все вопросы утвердительно «Да» — это неправильно. Потому что при этом автоматически сохранятся изменения, которые, может быть, пользователь недоделал. Или совсем не хотел сохранять. Часто ведь пользователь открывает форму документа, затем, например, дважды кликает по номенклатуре в табличной части и открывает форму элемента номенклатуры. В родительской форме — форме документа — при этом ставится признак, что имеются несохраненные изменения. Если при закрытии такой формы программа автоматически ответит «Да», а документ проведен, то он будет перепроводиться.

    Думаю, нужно отвечать «Нет» на все вопросы о сохранении изменений. А «Да» — только на вопрос о закрытии главного окна 1С.

    Reply
  6. Shrek2015

    прикольная штука. хотя пользуюсь на сервере диспетчером терминала и убиваю сессии

    Reply
  7. iov

    (1) некрасиво… Что за ребячество?

    (5) согласен что отвечать да на все- просто опасно.

    Научить выгонять проще и эффективней через административный ресурс или через ввод длинной непонятной капчи после некорректного выхода. + отключалка крестика на терминальной сессии.

    Но автор старался- и заслужил печенешку одобрение.

    Reply
  8. soba

    (7) iov, Административный ресурс, это хорошо, конечно. Только вот не всегда и не везде работает

    А вот тайминги действительно бы настраиваемые, поскольку критерии у всех разные. Да и 10 секунд на завершение сессии не всегда хватает.

    Reply
  9. dka80

    Плюс за работу, но считаю, что однозначного может решить только пользователь выбирать ДА или НЕТ, поэтому считаю, что нужно просто прибивать такие сеансы. Есть, конечно, в 7.7 с этим проблемы (в частности, с индексами), а в восьмерке какие?

    Reply
  10. slavapil

    (5) kapustinag, можно добавить INI файл с настройкой, как отвечать на вопросы «Да» или «Нет».

    Reply
  11. slavapil

    (4) CheBurator,

    — указание интервала неактивности сессии. например: 20 мин — если отключено менее указанного времени — ничего не делаем.

    тоже можно в INI прикрутить.

    — указание неактивности сессии как-то по разному для разных сессий/сеансов/пользователей 1С

    для реализации этой идеи надо както вытащить настройки пользователей сессий терминалки, попробую разобраться с ними.

    Reply
  12. slavapil

    (6) Shrek2015, он как раз и прибивает 1С, чего хотелось бы избежать 😉

    Reply
  13. Shrek2015

    если 1с в SQL то пусть прибивает. не так страшно 🙂

    Reply
  14. rus128

    (1) не «проподает», а «пропАдает»…

    Reply
  15. CheBurator

    (11) да, было бы хорошо.

    желательно развить в части большей гибкости управления…

    хотелок у меня много… 😉

    Reply
  16. slavapil

    (13) Shrek2015, да только вот пользователи не очень радуются потерянным данным 🙂

    Reply
  17. slavapil

    (5) kapustinag,

    Если при закрытии такой формы программа автоматически ответит «Да», а документ проведен, то он будет перепроводиться.

    Лучше пусть проведется документ, чем операторы склада потеряют не записанный документ на несколько сот строк тч. (сколько не учи пользователей записывать почаще изменения, никак не учатся, даже после потерь)

    Но опцию эту добавлю 🙂

    Reply
  18. yuraos

    (14) rus128,

    у меня по рускому с литиратурой — тройка в атестате

    Reply
  19. yuraos

    (1) некрасиво… Что за ребячество?

    (7) iov, согласен, что со стороны так может и показаться…

    но

    это была проверка одного довольно серьезного бага в функционале сайта

    (я бы даже сказал, что НАСТОЯЩЕЙ ДЫРЫ)

    Reply
  20. sudmorsh

    Нужная вещь, для меня актуально =|

    Reply
  21. Жолтокнижниг

    (17) slavapil, а есть идеи как реализовать подобное не из сервиса? из десктопа работать с окнами в определенной сессии, то что я пока нагуглил это nativApi.

    Reply
  22. ksnik

    2003 сервер, 1с77, результат работы этой проги:

    Visual Studio Just-In-Time Debugger

    An unhandled win32 exception occurred in Close1c.exe [14380].

    Possible debuggers: New instance of Visual Studio 2005

    Do you want to debug using the selected debugger?

    То есть терминальная сессия зависает, что делать?

    Reply
  23. ksnik

    пс: Всех с праздниками! 🙂

    Reply
  24. Abadonna

    (5) kapustinag,

    Думаю, нужно отвечать «Нет» на все вопрос

    Тогда проще сразу процесс грохнуть, равносильно всем «нет»

    Reply
  25. kapustinag

    (24) Abadonna, Конечно, проще грохнуть процесс. Но при этом могут не сохраниться, например, настройки пользователя. Поэтому нормально завершаем процесс, все пользовательское пусть автоматически сохраняется как положено, а все недоделанные изменения в документах и т.п. — в топку.

    Отвечать «ДА» можно для тех пользователей, которые ведут свой обособленный кусок учета. Для кладовщика, например.

    А для экономиста или бухгалтера — только «Нет».

    Reply
  26. yuraos

    Отвечать «ДА» можно для тех пользователей, которые ведут свой обособленный кусок учета. Для кладовщика, например.

    А для экономиста или бухгалтера — только «Нет».

    идея конечно хорошая



    но как это поймет прога, которая знает про 1С только то,

    что у нее иконка желтая (бывает квадратная и еще бывает круглая) ???

    Reply
  27. Abadonna

    (26)

    но как это поймет прога

    Понять она сможет, если сопоставить имя терминал-пользователя (оно есть в инфе о сессии) с тем, кому надо «Да», а кому «Нет». Но, имхо, считаю это лишним. Надо просто мочить процессы, у меня вот эта Автозакрытие висящих терминальных сессий безотказно работала, без всяких «побочных эффектов»

    Reply
  28. slavapil

    (21) Жолтокнижниг,

    а есть идеи как реализовать подобное не из сервиса? из десктопа работать с окнами в определенной сессии, то что я пока нагуглил это nativApi.

    Не совсем понял вопрос, управление окнами и так происходит не из сервиса, а из программы под десктопом сессии.

    Reply
  29. Жолтокнижниг

    (28) slavapil, реализовать туже схему, из десктопа: запустил я программу, а она «правильно» закрывает окна в других сессиях. начальная точка не сервис, а десктоп.

    Reply
  30. slavapil

    (29) Жолтокнижниг, без сервиса реализовать такой функционал сложно, вроде не хватит прав доступа.

    Reply
  31. Жолтокнижниг

    я знаю что сложно и стремится к невозможному, но… хочется

    Reply
  32. slavapil

    Обновление:

    + добавлены настройки ini файл:

    [options]

    to_answer_the_question=1

    interval_of_session_inactivity=0

    wait_before_killing=10

    описание параметров:

    to_answer_the_question — отвечать на вопросы 1=Да, 0=Нет .

    interval_of_session_inactivity — интервала неактивности отключонной сессии в минутах, если 0=сразу

    wait_before_killing — ожидание в секундах перед уничтожением процеса 1С (если не смогли выключить).

    + Настройки ini файла лежащий рядом с exe действует на всех пользователей,

    для индивидуальной настроки пользователей разместите ini файл в каталоге пользователя

    например пользователю User: « C:Documents and SettingsUserClose1s.ini».

    Reply
  33. slavapil

    (27) Abadonna,

    Автозакрытие висящих терминальных сессий

    Если парсить query session, то у меня в активной сессии нормально отображает, а в отключенной вместо активности и времени выдает «диск отключен». Возможно у некоторых пользователей и не работало «Автозакрытие».

    Reply
  34. Abadonna

    (33) slavapil, я ее писал под 2003-й сервер, 2008-го, кажись, тогда и в помине не было. А 2003-й точно не выдавал «диск отключен»

    Reply
  35. slavapil

    (34) Abadonna, у меня выдает такое Windows Server 2003 R2 Standard Edition sp2.

    Reply
  36. Abadonna

    (35) slavapil, ну, фиг его знает… я такого не видел, хотя можно и добавить условие на «диск отключен».

    Там дел-то… Мне сейчас это неактуально, основные клиенты сидят на крутой выгонялке

    Reply
  37. nurislam

    Спасибо мне как раз нужно

    Reply
  38. pt_olga

    (34) Abadonna, под 2008 переписать не планируете? Актуально

    вообще вещь хорошая, если сработает неубивание на определенную группу пользователей, то вообще шик!

    Программисты по ночам бывает запускают всякие обработки нужные, на терминальнике висит длинный idle, но убивать нельзя

    Reply
  39. taiba

    (32) slavapil, интересная идея!

    Есть замечания по переводу:

    «to_answer_the_question» — это «гениталий на гусенечном ходу», так не пишут, могу предложить вариант — say_yes_on_queryboxes. Кстати, если выскочит окно с Ок/Отмена а не Да/Нет что будет? А было бы неплохо… 😉

    «interval_of_session_inactivity» — лучше «session_inactivity_interval»

    Reply
  40. Loader_1C

    (32) slavapil, спасибо! Еще бы, было бы не плохо, на первой странице версионировать описание, или как там правильнее, описывать изменения от такого-то. Просто предложение.

    Reply
  41. slavapil

    (40) Loader_1C, Считаю что для конкретно этого проекта, версионность не особо актуальна.

    Reply
  42. slavapil

    (39) taiba,

    Кстати, если выскочит окно с Ок/Отмена а не Да/Нет что будет?

    Хороший вопрос. Напомните, в каких случаях выскакивают такие вопросы Ок/Отмена.

    Поразмышлял и пришел к выводу что «не хороший» пользователь может получить предупреждение даже с кнопкой ОК, и забросить программу 😉

    Значит, исправим и такого пользователя 🙂 в ближайшем обновлении.

    Reply
  43. taiba

    (42) slavapil,

    Напомните, в каких случаях выскакивают такие вопросы Ок/Отмена.

    в окнах типовых вроде нет, а вот в самописных может быть какой-нибудь «диалог закрытия программы».

    Reply
  44. slavapil

    Обновление от 22.05.2013:

    + изменен алгоритм по кнопкам, теперь учитываются диалоговые окна: «Да/Нет», «Ок/Отмена», «Ок» и т.д.

    Reply
  45. han

    А у меня на сервере 2008 SP2 R2 (64бит) почему-то не работает

    Reply
  46. slavapil

    (45) han, тестировал на своем «стареньком» 2003, как получится потестирую на 2008

    Reply
  47. 1cmax

    (7) iov, Длинная капча.. ммм хорошая идея 🙂 есть реализации ? ссылк?

    Reply
  48. Alex1Cnic

    Спасибо, интересно проверю на своем серваках..Win2k8 32 и Win2k8 64бит

    Reply
  49. Sjawa2004

    (13) Прибивает, это конечно хорошо! Но допустим есть внешние COM соединения с другой базой и после нескольких таких прибиваний при повторном входе пользователя в базу они просто не устанавливаются по новой (зависаю)! А перезапускать сервер как-то не сильно хочется! Поэтому автору + за наводку!!!

    Reply
  50. validat

    Вещь нужная, особенно в пятницу, для забывчивых. Всех с праздником, с пятницей и первым днем лета. Мои операторы на семерке закрывают просто терминальный режим и все, предварительно закрыв один эску. Пока разрывов связи нет, поэтому обхожусь так. Зато в проблемных сетях без такой программки не обойтись.

    Reply
  51. dyak84

    Автор я так понимаю ето не прграмка а просто бортовая функция сервера терминалов, которая была еще в 2000 сервере. Как многие администраторы которые настраивают сервера про нее не знают ето большая загадка. Но за труд все одно спасибо Так дерджать.

    Reply
  52. slavapil

    (51) dyak84, не совсем так понимаете, функция отключения сеансов была, и администраторы о ней знают.

    Но при таком отключении программы закрываются как при выключении компьютера с не закрытыми программами. 1с8 при таком поведении практически не страдает, а вот 1с7.7 страдала, так как при таком выключении считала, что завершилась крахом и требует монопольного входа для переиндексации. Этот сервис опирается на работу сервера терминалов, ловит момент отключения сессии и закрывает 1С, эмулируя работу пользователя (например, как будто пользователь мышкой нажал в 1с по крестику и кнопкам да или нет).

    Reply
  53. сибирь

    Добрый день. У нас виста. Скачал программу , запустил — в процессах Windows висит процесс close1c — и всё —

    в инструкции написано : Сервис установится с именем «Закрытие 1С при отключении сессии».

    где мы должны увидеть этот сервис : в пуске нет, в 1с -тоже нет???

    Reply
  54. slavapil

    (53) сибирь,

    В сервисах операционной системы, Пуск->Панель управления->Администрирование->Службы

    или Пуск->Панель управления->Администрирование->Службы->Управление компьютером->Службы и приложения->Службы

    Reply
  55. сибирь

    Да, спасибо, вижу. Но вопрос у нас такой. К самому серверу доступа нет, но многие бухгалтера выходят из терминального режима , забыв выйте из 1С, мы полагали, что если эту программу установить на какую-либо рабочую станцию — это позволит автоматом закрывать 1С запущенную на сервере. это наверно ни так?

    Reply
  56. slavapil

    (55) сибирь,

    Этот сервис написан для сервера терминалов, для закрытия 1с в сессиях пользователей терминального сервера. Не для компьютеров пользователей, (устанавливать его нужно только на сервере).

    мы полагали, что если эту программу установить на какую-либо рабочую станцию — это позволит автоматом закрывать 1С запущенную на сервере. это наверно ни так?

    не так

    К самому серверу доступа нет

    обратитесь к тому, у кого есть доступ к серверу

    Reply
  57. andrey.garin

    подскажите, будет ли сервис работать на windows server 2008 x64?

    Reply
  58. serg1c

    Нормальная штука, но почему рубит процессы, которые запускаются по заданиям, и не имеют сеанса сервера. Может чего не так делаю? А вообще работает на 2008 R2 нормально без проблем.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *