Служба Windows самоперезапуск.
Модератор: Модераторы
Служба Windows самоперезапуск.
Здравствуйте.
Такой вопрос.
Есть ли способ службе windows сделать само-перезапуск? Или нужно запускать внешний батник через TProcess без poWaitOnExit с передачей PID в командной строке. И там уже обычным taskkill /F /PID %id% прибивать процесс и запускать по новой?
Такой вопрос.
Есть ли способ службе windows сделать само-перезапуск? Или нужно запускать внешний батник через TProcess без poWaitOnExit с передачей PID в командной строке. И там уже обычным taskkill /F /PID %id% прибивать процесс и запускать по новой?
Вкладка "Восстановление" в свойствах службы.
Основная проблема в "сервисе/службе виндовс" в том что там нет хембела (Handle) окна(/приложения) и соответственно, все, что требует привязки к "родителю" работает через пень колоду и вроде бы TProcess не исключение .
Последний раз редактировалось Alex2013 22.10.2024 11:39:55, всего редактировалось 1 раз.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
При прямых руках, это не проблема.Alex2013 писал(а):Основная проблема в "службе виндовс" в том что там нет хембела (Handle) окна(/приложения) и соответственно, все, что требует привязки к "родителю" работает через пень колоду и вроде бы TProcess не исключение .
-
xchgeaxeax
- постоялец
- Сообщения: 197
- Зарегистрирован: 11.05.2023 02:51:40
А надо именно процесс убивать? Или же пойдет или по старинке или через PowerShell
Код: Выделить всё
sc stop "имя службы" && sc start "имя службы"Код: Выделить всё
net stop /y "имя службы" && net start "имя службы"Код: Выделить всё
powershell -command "Restart-Service <имя службы>"Я не точно сформулировал.Sharfik писал(а):Вкладка "Восстановление" в свойствах службы.
Нужен программный перезапуск службы написанной на lazarus по условия. Саму себя перезапускать.
Видимо такого нет. Только через внешний батник.
нонсенс какой-то?! служба для того и предназначена, чтобы работать круглосуточно. а если необходимо делать паузы, то sleep в руки
-
xchgeaxeax
- постоялец
- Сообщения: 197
- Зарегистрирован: 11.05.2023 02:51:40
Просто не понятно зачем вам это? Память течет?jsa писал(а):Я не точно сформулировал.
Нужен программный перезапуск службы написанной на lazarus по условия. Саму себя перезапускать.
Видимо такого нет. Только через внешний батник.
Если надо программно перезапуститься, тогда просто выполните программно процедуры stop/start указываемые при регистрации службы.
Кстати по поводу - память течет, использую для интеграции WebView4Delphi WebView2, таки да течет память, сначала стал периодически перегружать сайт в WebView, потом пересоздавать WebView, с каждым разом утечки уменьшались но все равно еще есть, что еще посоветуете?
сейчас снаружи перегружают
сейчас снаружи перегружают
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Использовать Task Scheduler.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Именно. Кстати, тогда и непонятно зачем именно служба WIndows. Если просто запустить, некоторое время поработать и закрыться... Службы и демоны на то они и есть, чтобы работать постоянноСнег Север писал(а):Task Scheduler
ну очевидно если инициализация много времени занимает то лучше постоянно запущенную прогу иметь с очередью заданий, в моем случае непрерывная интеграция во много потоков, по идее надо написать прогу менеджер той кучки прог, руки еще не дошли. а вот почему утечка непонятно, конечно есть версия что движок хрома в принципе жадный до всех ресурсов, то есть поможет тока периодическая перезагрузка.
Нужна такая возможность чтобы перезапускать раз в указанный период или по событию. Служб у меня несколько, работают с разными внешними объектами файлы, API, железки.xchgeaxeax писал(а):Просто не понятно зачем вам это? Память течет?
Иногда теряют коннект с объектами. причины всегда разные и с ними надо разбираться. Но службы уже используются и остановки не должны случаться.
В 99,9% простой перезапуск решает вопрос с этими подключениями.
Само собой это не основной метод, и в каждом случае приходится разбираться и реализовывать "защиту от дурака" чтобы обойти проблему или отработать возникшее исключение.
Но для этого достаточно логов, а службу надо перезапустить.
Т.е. временная заглушка, страховка от прекращения работы.
Службу я останавливаю когда нужно (если утерян-отключен объект для работы).xchgeaxeax писал(а): Если надо программно перезапуститься, тогда просто выполните программно процедуры stop/start указываемые при регистрации службы.
Код: Выделить всё
Application.StopDaemons(true);StopDaemons это процедура в unit daemonapp;
там же есть procedure RunDaemons;
но не понятно откуда ее задействовать, и возможно ли это.
-
xchgeaxeax
- постоялец
- Сообщения: 197
- Зарегистрирован: 11.05.2023 02:51:40
Код: Выделить всё
Program TestDaemon;
Uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
CThreads,
{$ENDIF}{$ENDIF}
DaemonApp, lazdaemonapp, daemonmapperunit, DaemonUnit, DaemonWorkerThread,
DaemonSystemdInstallerUnit, MyDaemonApplicationTerminated
{ add your units here };
begin
Application.Initialize;
while not ApplicationTerminated do Application.Run;
end.Код: Выделить всё
unit MyDaemonApplicationTerminated;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils;
var
ApplicationTerminated: Boolean = False;
implementation
end.ЗЫ Только такой перезапуск не закроет потерянные хэндлы, если они не закроются вашей программой корректно и они могут у вас утекать.
Кстати, давно хотел спросить , сервис виндовс и служба виндовс это одно и тоже? И если да то можно ли использовать средства виндовс предназначенные для управления службами для контроля и обслуживания своего сервиса ?
Последний раз редактировалось Alex2013 22.10.2024 11:38:37, всего редактировалось 1 раз.
