为了能够测试与监视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;
}
我让控制器为null但是仍然无法获得NullReferenceException,因为在Stop方法的开头检查为null。
间歇性地发生,我得到的例外是:
System.NullReferenceException 你调用的对象是空的。 在System.ServiceProcess.ServiceController.Stop()。
当前仅在64位Win2008系统上发生错误
在检查不为null之后,我正在做任何错误或控制器变为空的任何原因吗?
修改
查看ServiceController代码帮助。在使用服务进行任何操作之前,我正在调用controller.Refresh并且它运行良好。
答案 0 :(得分:2)
该异常看起来像里面的 ServiceController.Stop()
。尝试使用.NET Reflector来查看该方法中发生的事情。