gpt4 book ai didi

c++ - 持有可执行文件句柄的 Windows 事件日志服务

转载 作者:行者123 更新时间:2023-11-30 03:08:23 26 4
gpt4 key购买 nike

我有一个服务应用程序,它在启动和关闭时记录事件日志记录。

我经常重建应用程序,然后重建主机上的可执行文件。这就是问题所在,在我的服务关闭后,Windows 事件日志服务(不是事件日志查看器)持有可执行文件的打开句柄,因此我无法更新它。

  • 我在可执行文件中嵌入了事件日志消息,我可以将其移出,但我只是将更新问题移至另一个文件。

  • 我已经仔细检查并正确配对了::RegisterEventSource/::DeregisterEventSource。

有人遇到过这个问题吗?

最佳答案

我也遇到过这个问题,所以只是添加一些我的经验。

我有一个 Windows 2008 服务系统(在 2003 服务器上没有看到这个),当我停止我的服务时,svchost.exe 的实例加载服务可执行文件(使用 vmmap.exe 或 Process Hacker 可见)阻止它在卸载/安装期间被删除/覆盖。 svchost.exe 实例正在运行 DHCP 客户端 (Dhcp)、TCP/IP NetBIOS Helper (lmhosts) 和 Windows 事件日志 (EventLog) 服务。

在我们的例子中,我们创建了一个注册表项,使我们的服务可执行成为事件源。 (虽然我不确定我们为什么要这样做,或者我们是否应该这样做)。

根据经验,如果我在停止服务之前删除该注册表项,则 svchost.exe 不会加载可执行文件,一切正常。如果该服务已被停止并由 svchost.exe 加载可执行文件,则重新启动事件日志服务(或终止进程)也会释放可执行文件。

我猜我们的服务表现不佳(可能是 64 位操作系统上的 32 位进程的副作用?)或未正确安装,但尚未隔离问题。

更新:这个问题似乎只发生在 HP 系统上(而不是 Dell 或 IBM),这很奇怪。安装了 HP 特定的管理组件,所以也许其中之一正在以某种方式改变行为?

关于c++ - 持有可执行文件句柄的 Windows 事件日志服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5076618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com