Я ищу надежный способ определить, можно ли остановить службу без потери или повреждения данных, или будет ли работать обычная остановка, если службу можно убить с помощью PowerShell.
Я подумал о том, чтобы посмотреть дескрипторы файлов для службы, чтобы узнать, пишет ли служба или читает что-то из своего рабочего каталога. Есть ли что-то еще, что я могу запросить через PowerShell, чтобы узнать, обрабатывает ли служба данные.
Самый «надежный» способ определить, можно ли остановить или убить службу, - это проанализировать ее исходный код, чтобы увидеть, правильно ли он обрабатывает завершение работы или событие остановки.
Следующее лучшее - это прикрепить к нему с помощью отладчика и устанавливайте точки останова вокруг важных событий.
Вы не говорите нам, что делает этот сервис или как он работает, но если вы хотите посмотреть, какой файл обрабатывает процесс, открытый во время нормальной работы, на мой взгляд, Process Explorer от Sysinternals - самый простой способ сделать это. Вы также можете отслеживать активность файловой системы в реальном времени с помощью Process Monitor, фильтруя результаты по процессу, который вы хотите видеть.
Если служба была написана правильно, она каким-то изящным образом списает все свои ресурсы до завершения процесса (при завершении работы через диспетчер служб) или, по крайней мере, тех, которые в противном случае привели бы к потере данных. .
sc query your-service
даст вам то, что менеджер по обслуживанию думает служба способна на это, но опять же, это в конечном итоге зависит от того, как была написана служба, и были ли функции реализованы должным образом или нет.
Изменить: то, что ваша служба зависает, когда вы пытаетесь ее остановить, говорит мне, что она написана неправильно.
Изменить: ну и последнее, если вы хотите сделать что-то скриптовое с этим, handle.exe - это программа командной строки для мониторинга дескрипторов. Вы можете проанализировать его вывод. Все эти утилиты Sysinternals находятся на общей папке WebDAV \ live.sysinternals.com \ Tools \