Доброго времени всем, никак не могу добиться автозапуска своей службы.
То есть при загрузке системы она стартует, а после logoff / logon уже не запускается. Приходится запускать её вручную.
(В свойствах службы стоит "Autostart".)
Как это победить?..
Здравствуйте, Vladimyr, Вы писали:
V>Доброго времени всем, никак не могу добиться автозапуска своей службы.
V>То есть при загрузке системы она стартует, а после logoff / logon уже не запускается. Приходится запускать её вручную.
V>(В свойствах службы стоит "Autostart".)
А по какой причине она останавливается? Logoff/logon сам по себе службы не останавливает.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Здравствуйте, Vladimyr, Вы писали:
V>Так что, видимо, надо ...
выкинуть форму из сервиса

... << RSDN@Home 1.1.4 rev. 391 >>
Здравствуйте, Vladimyr, Вы писали:
V>В общем, подробности такие: если у сервиса нет формы,
V>то он переживает процедуру логоффа, а если есть — форма закрывается,
V>и вместе с ней мой сервис. (Сбоев никаких нет.)
Вот что происходит, когда пытаются писать системные компоненты по типу обычных юзерских аппликух
Начнем с того, что сервис изначально не предназначен для того, чтобы иметь окна и взаимодействовать с десктопом. Правильный сервис работает сам по себе, и с юзером взаимодействует через шлюзовые приложения, запускаемые в сеансе юзера. Но для упрощения и экономии сервисам разрешено иметь окна и работать с десктопом напрямую, но при этом они должны принимать меры, чтобы с ними не поступили, как с обычными приложениями. В частности, при logoff всем окнам верхнего уровня шлется сообщение WM_ENDSESSION, которое в DefWindowProc закономерно трансформируется в WM_QUIT. То же самое, кстати, должно происходить и при обычном закрывании окна.
Нужно перехватывать сообщения о закрытии окна и завершении сеанса, и не давать им завершать thread. Либо, действительно, работать с окном в отдельном thread'е, который будет завершаться.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Спасибо, я не знал про трансформацию WM_ENDSESSION в WM_QUIT.
Бум пробовать с двумя процессами...
Главное тут — грамотно отслеживать logon и logoff,
но это уже другая история.
Здравствуйте, Vladimyr, Вы писали:
V>Спасибо, я не знал про трансформацию WM_ENDSESSION в WM_QUIT.
На самом деле конкретно этой трансформации не происходит — KB115825 утверждает, что WM_ENDSESSION окнам сервисов не посылается. Так что, скорее всего, имеет место типовая ситуация, когда окну посылается WM_CLOSE и/или WM_DESTROY, а кто-то в процессе обработки этих сообщений вызывает PostQuitMessage.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>