Чтобы иметь возможность проверить некоторую логику, связанную с мониторингом служб Windows, я создал оболочку ServiceController, которая в целом выглядит так:
public class ServiceControllerWrapper : IServiceController
{
public ServiceControllerWrapper(ServiceController controller)
{
this.controller = controller;
}
public void Stop()
{
if(controller == null)
return;
// actually the following code is running in a new thread
// but nothing more
try
{
controller.Stop();
}
catch(...)
{
...
}
}
... similar methods
private readonly ServiceController controller;
}
Я позволил контроллеру быть нулевым, но все еще невозможно получить исключение NullReferenceException из-за проверки на нулевое значение в начале метода Stop.
Это происходит периодически, и я получаю исключение:
System.NullReferenceException
В экземпляре объекта не задана ссылка на объект.
в System.ServiceProcess.ServiceController.Stop ().
В настоящее время ошибка возникает только в 64-битной системе Win2008
Есть ли какие-либо ошибки, которые я совершаю, или причина того, что контроллер стал нулевым после проверки, чтобы он не был нулевым?
EDIT:
Помогло заглянуть внутрь кода ServiceController. Перед выполнением какой-либо операции со службами я вызываю контроллер. Обновить, и он работает хорошо.