Auto-start service
От: Vladimyr  
Дата: 12.04.05 23:58
Оценка:
Доброго времени всем, никак не могу добиться автозапуска своей службы.
То есть при загрузке системы она стартует, а после logoff / logon уже не запускается. Приходится запускать её вручную.
(В свойствах службы стоит "Autostart".)
Как это победить?..
Re: Auto-start service
От: emusic Франция https://software.muzychenko.net/ru
Дата: 13.04.05 03:38
Оценка: +1
Здравствуйте, Vladimyr, Вы писали:

V>Доброго времени всем, никак не могу добиться автозапуска своей службы.

V>То есть при загрузке системы она стартует, а после logoff / logon уже не запускается. Приходится запускать её вручную.
V>(В свойствах службы стоит "Autostart".)

А по какой причине она останавливается? Logoff/logon сам по себе службы не останавливает.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re[2]: Auto-start service
От: Vladimyr  
Дата: 13.04.05 07:38
Оценка:
В общем, подробности такие: если у сервиса нет формы,
то он переживает процедуру логоффа, а если есть — форма закрывается,
и вместе с ней мой сервис. (Сбоев никаких нет.)

Так что, видимо, надо запустить форму в отдельном потоке
и рестартануть её после логона.
Вот только как отследить, что логон уже произошёл?
Re[3]: Auto-start service
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 13.04.05 07:42
Оценка:
Здравствуйте, Vladimyr, Вы писали:

V>Так что, видимо, надо ...


выкинуть форму из сервиса
... << RSDN@Home 1.1.4 rev. 391 >>
Re[3]: Auto-start service
От: emusic Франция https://software.muzychenko.net/ru
Дата: 13.04.05 07:49
Оценка:
Здравствуйте, Vladimyr, Вы писали:

V>В общем, подробности такие: если у сервиса нет формы,

V>то он переживает процедуру логоффа, а если есть — форма закрывается,
V>и вместе с ней мой сервис. (Сбоев никаких нет.)

Вот что происходит, когда пытаются писать системные компоненты по типу обычных юзерских аппликух

Начнем с того, что сервис изначально не предназначен для того, чтобы иметь окна и взаимодействовать с десктопом. Правильный сервис работает сам по себе, и с юзером взаимодействует через шлюзовые приложения, запускаемые в сеансе юзера. Но для упрощения и экономии сервисам разрешено иметь окна и работать с десктопом напрямую, но при этом они должны принимать меры, чтобы с ними не поступили, как с обычными приложениями. В частности, при logoff всем окнам верхнего уровня шлется сообщение WM_ENDSESSION, которое в DefWindowProc закономерно трансформируется в WM_QUIT. То же самое, кстати, должно происходить и при обычном закрывании окна.

Нужно перехватывать сообщения о закрытии окна и завершении сеанса, и не давать им завершать thread. Либо, действительно, работать с окном в отдельном thread'е, который будет завершаться.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re[4]: Auto-start service
От: Vladimyr  
Дата: 13.04.05 19:54
Оценка:
Спасибо, я не знал про трансформацию WM_ENDSESSION в WM_QUIT.
Бум пробовать с двумя процессами...
Главное тут — грамотно отслеживать logon и logoff,
но это уже другая история.
Re[5]: Auto-start service
От: emusic Франция https://software.muzychenko.net/ru
Дата: 14.04.05 03:03
Оценка:
Здравствуйте, Vladimyr, Вы писали:

V>Спасибо, я не знал про трансформацию WM_ENDSESSION в WM_QUIT.


На самом деле конкретно этой трансформации не происходит — KB115825 утверждает, что WM_ENDSESSION окнам сервисов не посылается. Так что, скорее всего, имеет место типовая ситуация, когда окну посылается WM_CLOSE и/или WM_DESTROY, а кто-то в процессе обработки этих сообщений вызывает PostQuitMessage.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.