9

Windows 中是否为应用程序开发人员保留了特定范围的事件 ID?

我正在开发一个将错误写入 Windows 事件日志的 .Net 应用程序。这个应用程序实际上以服务器为目标,并将由偏执的系统管理员作为计划任务运行,他们希望尽可能地锁定它(包括使用降低权限的维护帐户运行它)。该应用程序不会被正式安装——事实上,我什至没有为此构建安装程序;只是一个带有 .exe 和 app.config 文件的 zip 文件。

诀窍是:在 Windows 中,您需要管理员权限才能在应用程序事件日志中创建源。由于我不能指望这一点,并且我不想让过度劳累的系统管理员需要创建一个,所以我使用“应用程序错误”(由 MS Office 使用)作为后备。(选择一个更好的后备在我的待办事项清单上,因为办公室并不经常安装在服务器上)。

问题是我仍然希望我的活动能够脱颖而出,而不仅仅是伪装成 Office。这样,我的系统管理员可以轻松地过滤到事件查看器或他们选择的日志聚合器中的那些事件。我现在知道的最佳解决方案是使用事件 ID,但我担心与内部 Windows 事件发生冲突,特别是考虑到我的目标受众。

我已经看过了,但我找不到任何关于此的文档。那么,我应该使用特定范围的事件 ID,我可以使用任何东西,还是应该在这里看一个完全不同的选项?

4

2 回答 2

4

并不真地。在顶层,您有一个事件源。每个事件源都有自己的事件类别。每个事件消息都由事件源“拥有”并属于其事件类别之一。如果您要在其他人的事件源下记录您的事件,那么您就违反了这个约定,并且很可能会发生事件 ID 冲突。

另一方面,事件 ID在结构上类似于 HRESULT,并且您可以设置一个客户位。还有一个设施代码字段,但 Microsoft 只为第 3 方提供一种设施(其余为保留)。即使你弄乱了这些位,你仍然任由事件源的所有者摆布;如果 Microsoft 曾经向您正在使用的事件源写入某些内容并设置客户位或设施代码(例如,可能是非 Windows 组件,如 Office 或其他东西),您将再次面临同样的冲突危险。或者,如果其他开发人员决定做与您正在做的事情相同的事情。真正最安全的方法是定义自己的事件源。

于 2011-02-01T21:41:49.227 回答
2

看来这是问题的症结所在

我担心与内部 Windows 事件发生冲突,尤其是考虑到我的目标受众。

我认为您不必担心,因为事件 ID 对应于特定的事件源,因此除非您使用完全相同的源,否则您不会让管理员感到不安。例如,MS 有时确实使用不同来源的相同 ID 。

如果您想获取有关已注册发布者和事件 ID 的信息,您可以使用Wevtutil例如这将列出发布者。

wevtutil ep

从中您可以获取用于发布者的特定事件 ID,您可以使用以下内容(此示例中使用了事件日志)

wevtutil gp Microsoft-Windows-EventLog /ge /gm:true

如果你擅长 powershell,我相信你可以想出一个脚本来获取所有注册的事件 ID

于 2011-02-01T22:31:50.400 回答