Программа (Сервис) закрытия 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 не будет опубликован. Обязательные поля помечены *