我在服务停止期间调用RegisterEventSource()函数。但它在系统关闭期间返回null。这种行为有什么理由吗?
错误:我在GetLastError()上收到错误代码0x800706b5 当谷歌搜索时,我发现它与缺少注册表数据有关。
另外,如何检查系统关闭是否已经开始? (即相当于C#中的HasShutdownStarted())
答案 0 :(得分:3)
服务可以指定在系统关闭时是否会通知他们。使用SERVICE_ACCEPT_SHUTDOWN
标志调用SetServiceStatus()。然后,您将在服务控制消息处理程序中收到SERVICE_CONTROL_SHUTDOWN
消息。
编辑:如果确实如此,正如Zach建议的那样,您使用RegisterEventSource时遇到的问题是因为事件服务已经关闭,执行事件日志写入以响应此通知也可以解决该问题。
答案 1 :(得分:2)
我只能猜测为什么RegisterEventSource会在系统关闭期间返回null,因为我从来没有这种行为。 [免责声明:很久以前我离开了Win32编程的日子,现在是100%.NET。)
我也无法在我从最新SDK访问的任何.h文件中找到错误代码0x800706b5。
在系统关闭期间,Windows事件服务是否已在服务之前关闭?
您可以尝试在服务和Windows事件服务之间设置依赖关系。这应该确保在系统关闭期间,您的服务将首先关闭。具有讽刺意味的是,我发现的最佳建议来自Adobe:How to create a dependency between Windows services。