1

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

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

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

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

有人遇到过这个问题吗?

4

3 回答 3

2

我也遇到过这个问题,所以补充一些我的经验。

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

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

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

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

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

于 2013-07-15T17:47:46.283 回答
1

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

于 2016-06-08T13:43:47.227 回答
0

我认为这可能是事件日志查看器。关闭查看器,你会没事的。

于 2011-03-02T17:43:01.173 回答