我修改了一个之前一直在启动的Windows服务。在添加System.Management引用后,它有时无法自动启动。我收到以下错误:
服务无法启动。 System.Runtime.InteropServices.COMException (0x80010002):调用已被消息过滤器取消。(来自HRESULT的异常: 0x80010002(RPC_E_CALL_CANCELED))
我在这里找到了另一篇帖子,其中有人遇到了同样的问题。
为什么我的.Net Windows服务在重新启动后无法自动启动?
然而,建议的解决方法是在依赖服务启动后启动该服务。但是,当我转到我的服务的依赖项选项卡时,我看到:
我应该只使用将线程休眠的解决方法,还是有更适当的方法可以使此服务正确启动?这是因为.NET尚未在我的服务启动之前启动吗?
谢谢,
Tomek
编辑:我已经添加了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)的异常)