Ну, для этого не делайте этого, по крайней мере, не в блокирующей манере. Чтобы ваш собственный сервис отвечал на SCM (Service Control Manager), чтобы вернуть свой статус, служба должна иметь возможность выполнять свой код диспетчера. Это означает, что если вы вызовете эту программу и дождитесь ее выхода, вы будете ждать бесконечно. Одним из способов смягчения этого было бы поместить это в отдельный поток, чтобы он не блокировал вашу диспетчеризацию, и ваша служба будет продолжать разговаривать с SCM.
В качестве альтернативы (и, вероятно, лучше) вы можете использовать функцию EnumServicesStatusEx
, чтобы поговорить с SCM и узнать о статусах других служб самостоятельно. Сама функция не упоминает ничего о блокировании, поэтому вам придется выяснить, есть ли это, а затем снова использовать поток, чтобы ваша служба не останавливалась, чтобы поговорить с SCM.
Последнее примечание: Если эти неправильные услуги являются вашими, вы, скорее всего, исправите соответствующий код. У меня была доля устаревшего кода, и у меня была одна неверная услуга, которая получила свое собственное вспомогательное приложение как «действие с ошибкой» (может быть настроено в конфигурации службы как SERVICE_CONFIG_FAILURE_ACTIONS
), которая могла бы запускать и перезапускать службу всякий раз, когда она разбилась. Как только я взял этот код, выяснил причину и исправил ее, служба была стабильной снова, и это приложение больше не нужно.
Хмм, после написания моего ответа я заметил, что вы даже не указали язык программирования, который вы использовали. – 0xC0000022L
Прежде всего, убедитесь, что ваш код работает при запуске как обычное приложение, а не как служба. –