Я думаю, что лучший способ сделать это - запустить командный файл вместо встроенного набора команд.Таким образом, пакетный файл может запустить «net stop» и получить ошибку, которая не влияет на выполнение дополнительных операторов.
Регистрируете ли вы «сбои» (ненормальные завершения) службы в журнале событий, используярегистрация сервиса в services.msc?Если нет, и вы просто говорите ему «перезапустить службу», если исполняемый файл когда-либо выходит по какой-либо причине, тогда это просто;Вместо этого вызовите Application.Exit (), и исполняемый файл службы будет нормально завершен, затем Windows перезапустит его.
Что касается дескрипторов реестра, если ваша служба работает с данными реестра, ваш метод OnStop должен задерживать программувыход, пока все ручки не убраны;это означает, что все фоновые потоки должны быть уведомлены об отмене, и им должно быть разрешено делать это изящно (что, в свою очередь, означает, что многопоточные процессы должны разрабатываться с возможностью отмены без простого их «уничтожения»), все открытые потоки файлов и реестра должны быть закрытыи должным образом утилизируются, и, как правило, служба не должна оставлять никаких «потертых концов».OnStop () может задержать выполнение программы примерно на 10 секунд, пока это происходит;если для полного выхода из службы требуется больше времени, Windows выдаст ошибку, и ваша служба в конечном итоге остановится, но не будет перезапущена.