Windows事件日志服务保存可执行文件句柄

时间:2011-02-22 09:56:23

标签: c++ winapi eventlog-source

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

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

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

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

有人遇到过这个问题吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

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

我猜我们的服务不是很好(可能是64位操作系统上的32位进程的副作用?)或者是否已正确安装,但尚未解决问题。

更新:此问题似乎只发生在惠普系统(而不是戴尔或IBM)上,这很奇怪。安装了HP特定的管理组件,因此其中一个可能会以某种方式改变行为?

答案 1 :(得分:1)

我也遇到过这个问题。就我而言,nxlog服务读取日志。只需在替换事件源文件之前停止nxlog服务。

答案 2 :(得分:0)

我认为可能是事件日志 viewer 。关闭观众,你会没事的。