【发布时间】: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