Простое и надежное решение - уничтожить процесс обслуживания . В конце концов, процесс - это безопасная для памяти абстракция ОС, так что вы можете безопасно завершить его, не обращая внимания на внутреннее состояние процесса - конечно, если ваш процесс взаимодействует или играет с внешним состоянием, все ставки отключены ...
Кроме того, вы можете реализовать решение, которое обычно делают сами ОС: один предупреждающий сигнал с просьбой очистить процесс как можно лучше (который устанавливает флаг и корректно завершает то, что может быть изящно остановлено), а затем принудительное завершение, если процесс не выходит сам по себе (что прекращает такие неприятные вещи, как блокировка ввода / вывода).
Все службы должны быть построены таким образом, чтобы принудительное завершение не было вредным, поскольку эти процессы управляются системой и могут прерываться такими вещами, как перезагрузка - т. Е. Ваша служба в идеале должна разрешать это без повреждения хранение в любом случае.
О, и одно последнее предупреждение; Службы Windows могут совместно использовать процесс (я полагаю, что для эффективности, хотя это кажется мне оптимизмом, которого можно избежать), поэтому, если вы идете по этому пути, вы хотите убедиться, что ваша служба не делится процессом с другими службами , Вы можете убедиться в этом, передав параметр SERVICE_WIN32_OWN_PROCESS в ChangeServiceConfig .