gifts2017

Автоматическая перезагрузка 1с

Опубликовал Michael Cher (mmch) в раздел Программирование - Практика программирования

Автоматический перезапуск 1с при сбоях, отключениях, потерях сети и регламентных работах (средствами 1с)

Иногда возникает необходимость чтобы 1с была постоянно запущена на компьютере, например для организации учета рабочего времени сотрудников, считывания штрих-кодов и т.д., причем при возможных сбоях, отключениях, потерях сети, регламентных работах - программа должна автоматически перезапускаться без участия пользователя.

 

Для решения такой задачи можно сделать следующее:

 

Функционал: интерактивно запускается обработка, которая создает задачу в планировщике задач Windows, эта задача запускает 1с по заданному рассписанию.

каждые 30  секунд  обработка переводит время запуска 1с на 5 минут вперед, если 1с зависнет - обработка перестанет переводить время запуска задачи в планировщике, и 1с автоматически перезагрузится через 5 минут, дальше все по циклу.

 

Реализация.

1. При старте 1с запускаем обработку (например вызывает ее из процедуры ПриНачалеРаботыСистемы)

2. В обработке подключаем обработчик ожидания

ПодключитьОбработчикОжидания("ПриОжидании", 30);

и создаем процедуру:

 

Процедура ПриОжидании() //!СМ!

  //- MMЧ - создадим файл для перезагрузки 1с !СМ!
  БАТ = Новый ТекстовыйДокумент;

 //  БАТ.ДобавитьСтроку("pskill 1cv8"); //- MMЧ - удалание приложения, на компьютере необходимо установить pskill.exe !СМ!

 БАТ.ДобавитьСтроку("taskkill /IM 1cv8* /f"); //- MMЧ - удалание приложения, штатные средства закрытия приложения


  БАТ.ДобавитьСтроку("start /max C:\Progra~1\1cv82\Common\1cestart.exe enterprise /AppAutoCheckMode /sserver1c\1c8Complex /N""User"" /pПароль"); //- MMЧ - запуск 1с под конкретным   пользователем !СМ!
  БАТ.Записать("c:\client.bat",КодировкаТекста.ANSI);


  //- MMЧ - СОЗДАИМ В ПЛАНИРОВЩИКЕ ЗАДАЧ ЗАДАЧУ И ПЕРЕВЕДЕМ У НЕЕ ВРЕМЯ НА 5 МИНУТ ВПЕРЕД !СМ!
  //- MMЧ - КОГДА 1С ПОВИСНИТ, ЧЕРЕЗ 5 МИНУТ ПЛАНИРОВЩИК ЕГО ПЕРЕЗАПУСТИТ !СМ!
  WshShell = Новый COMОбъект("WScript.Shell");
  ///Найдем задачу и удалим - это для XP, для более поздних систем можно использовать параметр /F , тогда искать и удалять задачу не требуется
  строкаКоманды = "schtasks /delete /TN ""1c RESTART"" /F";
  WshShell.Run(строкаКоманды, 0, Истина);
  ///Создаем задачу

  //- MMЧ - проверить создание задачи, можно запустив строку коменды в командной строке Windows  !СМ! 
  //- MMЧ - для вызова помощи по параметрам введите schtasks /? в командной строке !СМ!
  строкаКоманды = "schtasks /create /sc minute /mo 10 /st "+Формат(ТекущаяДата()+60*5, "ДЛФ=T")+" /tn ""1c RESTART"" /tr c:\client.bat /ru ""DOMEN\UserWindows"" /RP ""ПарольWindows"" ";
  WshShell.Run(строкаКоманды, 0, Истина);
  WshShell = Неопределено;

КонецПроцедуры //

 


Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Перезагрузка 1с
.epf 6,76Kb
10.09.12
55
.epf 6,76Kb 55 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Roman Biblbox (mr zafod) 11.09.12 08:32
+ однозначно. Правда для таких манипуляций требуются права администратора у пользователя win
2. Konstantin Konstantin (KonstB) 11.09.12 09:10
Миха, с первой публикацией тебя! :)
3. Роман Кокарев (РоманКокарев) 12.09.12 11:44
с публикацией) так держать!
4. Sergio Bargio (sergiobargio1) 12.09.12 12:38
пожалуйста, подскажите это не тоже самое, что делает стандартная платформа при разрыве соединения с базой данных, повторно запускается с ожиданием в 1 минуту и так по циклу?
5. Michael Cher (mmch) 12.09.12 12:47
Нет, т.к. при обрыве в сети (например потеря Wifi) и прочие зависания, 1с-ка просто тупо виснет с ошибкой приложения.
6. John Smith (PiccaHut001) 12.09.12 18:38
7. vladal (Vladal) 13.09.12 18:00
А я подумал, что это кусок кода из типовой перезапуск 1С с тем же пользвателем. Уже хотел ругаться.
8. tazmag tazmag (tazmag) 22.09.12 00:20
с нашей сетью может и пригодиться, никак свитч не могут поменять, а мы мучаемся)) зелень однозначно!
9. Сергей (lsp71) 16.10.12 17:50
Спасибо за идею и за скриптик.
10. Michael Cher (mmch) 17.10.12 10:19
не за что, кстати есть уточнение...
вместо pskill можно использовать штатную windows утилиту taskkill
11. Michael Cher (mmch) 12.11.12 15:29
12. Константин (maverick76) 16.02.13 02:01
13. tazmag tazmag (tazmag) 04.07.14 15:16
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа