Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Уже похожих топиков создано много, но задача всё еще актуальна и четких ответов как ее решить, пока не нашел. Суть задачи : при завершении Windows нужно не дать завершиться службе, выполнить копирование файлов на другой диск (5-10 минут) и только после этого завершить работу ПК. В обычном приложении, которое работает под пользователем, мы просто ловим WM_QUERYENDSESSION В службе я создал невидимое окно, чтобы ловить оконные сообщения, но что-то WM_QUERYENDSESSION не ловится, хотя другие сообщения в этой же форме, такие как WM_DEVICECHANGE, WM_POWERBROADCAST, ловятся нормально. Пробовал даже на FormCloseQuery установить CanClose:=false, но OnCloseQuery почему-то не срабатывает. Может я неправильно вообще делаю и надо обработать TService.OnServiceShutdown и там что-то установить, чтобы не дать винде завершиться? Или в службе предотвратить завершение винды впринципе невозможно? Заранее за советы спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 12:19 |
|
||
|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?)
|
|||
|---|---|---|---|
|
#18+
Переходишь в состояние SERVICE_STOP_PENDING и пока работаешь - регулярно его обновляешь, увеличивая счётчик. Винда видит это и спокойно ждёт. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 12:35 |
|
||
|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Собственно, я так и делал. В обработчике TService.OnServiceShutdown с целью тестирования я сделал такой цикл: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Как только TService.OnServiceShutdown сработал, судя по логу выдало i=1 и i=2, прошло всего 2 сек и служба вырубилась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 13:42 |
|
||
|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?)
|
|||
|---|---|---|---|
|
#18+
27.04.2021 13:42, m52 пишет: > Собственно, я так и делал. нет. тебе нужно напрямую работать со структурой SERVICE_STATUS и инкрементировать в ней поле dwCheckPoint. https://docs.microsoft.com/en-us/windows/win32/api/winsvc/ns-winsvc-service_status Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 14:02 |
|
||
|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?)
|
|||
|---|---|---|---|
|
#18+
О кривых обёртках я ничего сказать не могу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 14:04 |
|
||
|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?)
|
|||
|---|---|---|---|
|
#18+
27.04.2021 14:04, Dimitry Sibiryakov пишет: > О кривых обёртках я ничего сказать не могу. посмотрел исходники TService. метод ReportStatus по идее должен инкрементировать dwCheckPoint, но написано там как-то уж очень черезжопно. не уверен, что работоспособно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 14:37 |
|
||
|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?)
|
|||
|---|---|---|---|
|
#18+
Впрочем, я тоже был неправ, сервис не может значительно задержать остановку Windows: https://docs.microsoft.com/en-us/windows/win32/services/service-control-handler-function Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 14:45 |
|
||
|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?)
|
|||
|---|---|---|---|
|
#18+
m52, можно попробовать использовать SERVICE_CONTROL_PRESHUTDOWN, правда 5-10 минут наверное не расчитано, но пишут что будет ждать пока не выйдет из обработчика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 14:47 |
|
||
|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?)
|
|||
|---|---|---|---|
|
#18+
Zelius, если я правильно понимаю, то выводится сообщение винды при шатдауне "ждать или не ждать", и если я нажму "не ждать", то сервис автора всё равно с копированием обломится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2021, 01:10 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40066366&tid=2037367]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 277ms |

| 0 / 0 |
