我修改了一个一直在预先启动的工作 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);
}
该服务现在确实启动了,但没有我添加的功能。我是 .NET 的新手,但我从网上找到的示例中获取了观察者代码,所以我很确定它是正确的。事件日志显示相同的异常:
无法创建睡眠/恢复观察程序呼叫已被消息过滤器取消。(来自 HRESULT 的异常:0x80010002 (RPC_E_CALL_CANCELED))