ServiceController.Stop中的NullReferenceException

时间:2011-04-14 16:02:02

标签: c# winforms multithreading windows-services wrapper

为了能够测试与监视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并且它运行良好。

1 个答案:

答案 0 :(得分:2)

该异常看起来像里面的 ServiceController.Stop()。尝试使用.NET Reflector来查看该方法中发生的事情。