【问题标题】:Why does my .NET Windows service not start automatically sometimes?为什么我的 .NET Windows 服务有时无法自动启动?
【发布时间】:2010-03-08 20:41:22
【问题描述】:

我已经修改了一个工作 Windows 服务,该服务总是提前启动。添加 System.Management 引用后,它现在有时不会自动启动。我收到以下错误:

服务无法启动。 System.Runtime.InteropServices.COMException (0x80010002): 呼叫被取消 消息过滤器。 (例外来自 HRESULT:0x80010002 (RPC_E_CALL_CANCELED))

我在 SO 上找到了另一个帖子,其中有人遇到了同样的问题。

Why won't my .Net Windows service start automatically after a reboot?

但是,建议的解决方案是在它所依赖的服务启动后启动该服务。但是,当我转到我的服务的 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);
        }

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

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

【问题讨论】:

  • 您也可以尝试在 ServerFault.com 上发布您的问题
  • 由于您现在使用 WMI,您可能应该等待 Windows Management Instrumentation 服务启动。尝试在安装时将其添加到依赖服务中。

标签: .net windows service system.management


【解决方案1】:

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

  1. 打开命令提示符(Windows+R -> cmd -> 回车)
  2. 类型:sc config "NAME_OF_YOUR_SERVICE" 依赖= winmgmt
  3. 回车,应该会看到:[SC] ChangeServiceConfig SUCCESS

重新启动您的计算机,您的服务现在应该可以正确启动了。

【讨论】:

  • 这是正确答案!您还可以将依赖项添加到服务安装程序。
【解决方案2】:

问题不在于服务本身,而在于您添加引用的新组件引发了未处理的异常(消息过滤器取消了调用)。使用您添加的任何代码解决该错误消息,和/或进行更好的错误处理,以便该组件中的错误不会冒泡到顶部并导致服务停止:-)

【讨论】:

  • @Joel Martinez 我已经添加了 try-catch 但我得到了同样的异常(见我的编辑)
【解决方案3】:

如果你依赖另一个服务,我们 sc.exe 来配置你的服务在依赖后启动。这无法通过服务小程序完成。

【讨论】:

  • 除服务小程序外,我如何才能知道我的服务依赖于哪些服务?
【解决方案4】:

我在创建 ManagementEventWatcher 之前(在 try 语句之前)最终使用了 Thread.Sleep(10000)

这是一种解决方法,但确实解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多