为什么我的.NET Windows服务有时不会自动启动?

Tom*_*mek 3 .net windows service system.management

我修改了一个一直在预先启动的工作Windows服务.添加System.Management引用后,它现在有时不会自动启动.我收到以下错误:

服务无法启动.System.Runtime.InteropServices.COMException(0x80010002):消息过滤器取消了呼叫.(来自HRESULT的异常:0x80010002(RPC_E_CALL_CANCELED))

我在SO上发现了另一篇帖子,有人遇到同样的问题.

为什么我的.Net Windows服务在重启后不会自动启动?

但是,建议的解决方案是在服务依赖的服务启动后启动服务.但是,当我转到我的服务的Dependencies选项卡时,我看到:

替代文字

我应该只使用将线程置于睡眠状态的变通方法,还是有更正确的方法让这个服务正确启动?这是否发生是因为.NET在我的服务启动之前还没有启动?

谢谢,

托梅克

编辑:我添加了一个try-catch语句来捕获异常.这是我添加到我的服务的OnStart()方法的代码(这是抛出异常的地方)

        try
        {
            _watcher = new ManagementEventWatcher(query);
            _watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
            _watcher.Start();  
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry("Could not create Sleep/Resume watcher" + ex.Message);
        }
Run Code Online (Sandbox Code Playgroud)

该服务现在开始,但没有我添加的功能.我是.NET的新手,但是我从网上找到的样本中获取了观察者代码,所以我很确定它是正确的.事件日志显示相同的异常:

无法创建睡眠/恢复观察者呼叫被消息过滤器取消.(来自HRESULT的异常:0x80010002(RPC_E_CALL_CANCELED))

小智 8

我自己有这个问题,显然它只发生在Windows XP上(不是在Vista或Win 7上).要解决此问题,您需要向Windows Management Instrumentation服务添加依赖项.将此依赖项添加到现有服务只需三个简单步骤:

  1. 打开命令提示符(Windows + R - > cmd - > enter)
  2. 键入:sc config"NAME_OF_YOUR_SERVICE"depend = winmgmt
  3. 按回车键,您应该看到:[SC] ChangeServiceConfig SUCCESS

重新启动计算机,您的服务现在应该正确启动.

  • 这是正确的答案!您还可以将依赖项添加到服务安装程序. (2认同)