Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.04.2021, 12:19
|
|||
|---|---|---|---|
Не дать завершиться 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:35
|
|||
|---|---|---|---|
|
|||
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?) |
|||
|
#18+
Переходишь в состояние SERVICE_STOP_PENDING и пока работаешь - регулярно его обновляешь, увеличивая счётчик. Винда видит это и спокойно ждёт. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.04.2021, 13:42
|
|||
|---|---|---|---|
Не дать завершиться 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, 14:02
|
|||
|---|---|---|---|
|
|||
Не дать завершиться 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:04
|
|||
|---|---|---|---|
|
|||
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?) |
|||
|
#18+
О кривых обёртках я ничего сказать не могу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.04.2021, 14:37
|
|||
|---|---|---|---|
|
|||
Не дать завершиться 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:45
|
|||
|---|---|---|---|
|
|||
Не дать завершиться 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:47
|
|||
|---|---|---|---|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?) |
|||
|
#18+
m52, можно попробовать использовать SERVICE_CONTROL_PRESHUTDOWN, правда 5-10 минут наверное не расчитано, но пишут что будет ждать пока не выйдет из обработчика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.04.2021, 01:10
|
|||
|---|---|---|---|
Не дать завершиться Windows из службы (WM_QUERYENDSESSION ?) |
|||
|
#18+
Zelius, если я правильно понимаю, то выводится сообщение винды при шатдауне "ждать или не ждать", и если я нажму "не ждать", то сервис автора всё равно с копированием обломится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=58&tablet=1&tid=2037367]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 10ms |
| total: | 279ms |

| 0 / 0 |
