【发布时间】:2021-07-03 03:37:20
【问题描述】:
可能我只是误解了System.Diagnostics.EventLog,但我无法以我的应用名称写入 EventLog。项目是 ASP.NET Web 服务 (.NET Framework 4),在 NETWORK SERVICE 用户下工作。
我试过这个并且它有效(如提到的here):
using (System.Diagnostics.EventLog eventLog = new System.Diagnostics.EventLog())
{
eventLog.Source = "Application";
eventLog.WriteEntry("MY LOG INFO", System.Diagnostics.EventLogEntryType.Information);
}
但 Application 不是我的应用程序的名称。所以我尝试将eventLog.Source = "Application"; 更改为eventLog.Source = System.Diagnostics.Process.GetCurrentProcess().ProcessName;。结果是异常找不到源,但有些...为here。 ProcessName 是 w3wp,对我来说没问题,但我不能写日志。所以我尝试使用 logName 参数重载构造函数,但没有成功。
如果我理解得很好,WriteLog 方法在某些情况下需要访问注册表(答案here)?好的,这需要更多然后更新 dll。很好的建议是在安装过程中写上提到的注册表更改。但是我的更改是分布式 dll 中的“仅”更新,而不是新安装。
MSDB 很刻薄,我发现了一些关于 EventLogPermissionAttribute(here) 和 EventLogPermission(here) 的信息,但它对我一点帮助都没有。我尝试使用它,但总是遇到同样的异常。没有例子。
最后我找到这个 (source):
EventLogPermission eventLogPermission = new EventLogPermission(EventLogPermissionAccess.Administer, ".");
eventLogPermission.PermitOnly();
if (!EventLog.SourceExists(source))
{
EventLog.CreateEventSource(source, "Application");
}
EventLog.WriteEntry(source, message, entryType);
但它以类似的异常结束。现在它说的很少:它无法访问“安全”协议。
所以,问题是:我应该如何写入 EventLog?或者确实有必要更新注册表(我可以通过我们的更新工具来完成,但我不相信我想要这样做)。
我还想了解System.Diagnostics.EventLog 的工作原理以及它在后台做什么,以便更好地理解我的代码(如果它对我有用的话)。
【问题讨论】: