找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性

时间:2013-12-05 00:48:15

标签: c# iis event-log iis-8

我收到错误:

  

找不到源,但部分或全部事件日志不可能   搜索。无法访问的日志:安全性

当我在代码下运行以捕获Win 2K12 R2服务器IIS 8.5上的错误

EventLog elog = new EventLog();
EventLog.CreateEventSource("MyApp", "Application");
EventLog.WriteEntry(Source, swError.ToString(), EventLogEntryType.Error);

我已经完全访问HKLM\SYSTEM\CurrentControlSet\services\eventlog,但它仍无法正常工作。我该怎么做才能解决它?

9 个答案:

答案 0 :(得分:56)

请参阅creating a registry key

此问题不仅可能由于权限而发生,还可能由于事件源密钥丢失而导致未成功注册(您需要管理员权限才能执行此操作 - 如果您只是像往常一样打开Visual Studio并正常运行程序这还不够)。确保您的事件源“MyApp”实际已注册,即它出现在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application下的注册表中。

来自MSDN EventLog.CreateEventSource()

  

在Windows Vista及更高版本或Windows Server中创建事件源   2003年,您必须拥有管理权限。

因此,您必须以管理员身份运行事件源注册码(同样,检查源之前是否已存在 - 请参阅上述MSDN示例),或者您可以手动将密钥添加到注册表中:

  1. 创建一个regkey HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\MyApp;
  2. 在里面,创建一个字符串值EventMessageFile并将其值设置为例如C:\Windows\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll

答案 1 :(得分:25)

运行Visual Studio时出现此错误。通过running Visual Studio as Administrator,应用程序能够访问安全日志,因为它具有足够的权限(从而防止出现错误)。

答案 2 :(得分:6)

我知道,我在聚会上有点迟了......发生了很多事情,你只需在IIS中使用 app pool 中的默认设置。在IIS管理实用程序中,转到app pools->select pool-->advanced settings->Process Model/Identity并选择具有正确权限的用户标识。默认情况下,它设置为ApplicationPoolIdentity。如果您是开发人员,则最有可能是您计算机上的管理员,因此您可以选择自己的帐户来运行应用池。在部署服务器上,让管理员处理它。

答案 3 :(得分:3)

每当启动Visual Studio时,都以管理员身份运行它。它对我有用。

答案 4 :(得分:2)

尝试提供AppPool ID或网络服务,无论哪种适用访问HKLM \ SYSTEM \ CurrentControlSet \ services \ eventlog \ security也是如此。我得到了同样的错误..这对我有用。请参阅错误,并指出无法访问的日志是安全日志。

我还在eventlog \ application中授予了权限。

我随处可以访问。

答案 5 :(得分:1)

本地我使用管理员权限运行visual studio ,错误消失了。

如果在任务计划程序中出现此错误,则必须检查以高权限运行的选项

答案 6 :(得分:0)

我最近开始使用Visual Studio 2013在我的内部NLog故障日志中收到此错误。该解决方案已使用NLog v2.0.0多年。在上个月,我们的主日志停止了工作。为了解决这个问题,我通过Nuget将NLog更新到最新版本(v3.1.0)。安全性异常现在消失,所有日志消息再次出现。

此外,我后来发现了另一个安全例外,并且可以按照此post in another thread上的说明进行修复。

答案 7 :(得分:0)

也可能是因为它可能无法找到所需的.dll文件。 文件不在文件夹中或重命名。 我遇到了同样的问题,发现我的bin文件夹中的.dll文件丢失了一些。

答案 8 :(得分:0)

在Visual Studio中进行调试时,在应用程序池高级设置中使用 NetworkService 作为标识值。如果您直接从浏览器打开网站(或转到IIS中的虚拟目录并使用右侧的“浏览”选项), ApplicationPoolIdentity 正在运行。