RegisterEventSource方法在Windows关闭时返回'null'

时间:2009-07-28 12:39:46

标签: windows winapi

我在服务停止期间调用RegisterEventSource()函数。但它在系统关闭期间返回null。这种行为有什么理由吗?

错误:我在GetLastError()上收到错误代码0x800706b5 当谷歌搜索时,我发现它与缺少注册表数据有关。

另外,如何检查系统关闭是否已经开始? (即相当于C#中的HasShutdownStarted())

2 个答案:

答案 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