Я пишу служебное приложение, которое иногда невозможно остановить сразу же после получения SERVICE_CONTROL_STOP от MMC служб. В настоящее время я обрабатываю это так: (в псевдокоде):
DWORD
HandlerEx(
DWORD dwControl,
DWORD dwEventType,
PVOID pvEventData,
PVOID pvContext
)
{
switch( dwControl )
{
case SERVICE_CONTROL_STOP:
if ( CanStopServiceNow() )
{
ReportStatus( SERVICE_STOP_PENDING );
DoStopService();
ReportStatus( SERVICE_STOPPED );
return NO_ERROR;
}
else
return ERROR_BUSY;
break;
}
return NO_ERROR;
}
Хорошо работает, когда служба может остановиться (и останавливается), но когда она не может остановиться, я ожидаю, что Windows сообщит об ошибке, которую я возвращаю (ERROR_BUSY в этом примере.) Вместо этого Windows отображает сообщение о том, что :
"The service did not return an error.
This could be an internal Windows error or an internal service error."
Итак, мой вопрос: как сделать так, чтобы сервис возвращал SCM отчет о том, что он не может остановиться сейчас, и заставляет MMC отображать сообщение о фактическом коде ошибки, который я возвращаю?