Requested registry access is not allowed(不允许所请求的注册表访问权)

来源:互联网 发布:linux 读者写者问题 编辑:程序博客网 时间:2024/05/16 18:59

Requested registry access is not allowed(不允许所请求的注册表访问权)

今天在写一个Service程序时候遇到这个问题,因为在自己的装XP的本本上测试OK,部署到装windows server 2003服务器上居然出现这个问题,猜测应该是权限管理问题。

问题出现在如下创建一个EventLog的代码中,

  1. public void LogEvent(String Message, EventLogEntryType type) 
  2.     string source = "DemoSource"
  3.      
  4.     if (!EventLog.SourceExists(source)) 
  5.     { 
  6.         EventLog.CreateEventSource(source, "DemoLog"); 
  7.     } 
  8.  
  9.     _log = new EventLog(); 
  10.     _log.Source = source; 
  11.     LogEvent(Message, type); 
  12.  } 

因为是使用VS调试的,就想还是用管理员权限来跑一下试试(i.e. Run as administrator),结果果然很灵光,顺利通过。

然后去谷哥上Search一下:


EventLog.CreateEventSource()

如果以普通用户身份登录计算机,并尝试使用 Microsoft Visual Studio .NET 创建自定义事件日志以注册事件,可能会收到以下错误消息:

An unhandled exception of type 'System.Security.SecurityException' occurred in mscorlib.dll
Additional information:Requested registry access is not allowed.

出现此问题的原因在于登录所用的用户帐户没有足够的权限。
首次调用 EventLog.CreateEventSource() 方法创建自定义事件日志时,将会在下面的注册表子项下创建自定义事件日志条目:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog

要创建此子项条目,必须拥有写权限。但是,普通用户帐户没有写权限。因此,会收到“症状”部分中提到的错误消息。

警告:如果使用注册表编辑器或其他方法错误地修改了注册表,则可能导致严重问题。这些问题可能需要重新安装操作系统才能解决。Microsoft 不能保证可以解决这些问题。修改注册表需要您自担风险。
要解决此问题,请使用下列方法之一:

  • 授予创建自定义事件日志的权限
  • 以管理员身份安装自定义事件日志
授予创建自定义事件日志的权限
  1. 以管理员身份登录计算机。
  2. 依次单击“开始”和“运行”,在“打开”框中键入 regedit,然后单击“确定”。这将打开“注册表编辑器”窗口。
  3. 找到以下注册表子项:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog

  4. 右键单击“Eventlog”,然后单击“权限”。这将显示“Eventlog 的权限”对话框。
  5. 单击“高级”。此时显示“Eventlog 的高级安全设置”对话框。
  6. 在“名称”列中,双击“Users”组。这将显示“Eventlog 的权限项目”对话框。
  7. 依次选中“设置数值”和“创建子项”复选框,然后单击“确定”。
  8. 退出注册表编辑器,然后从管理员帐户中注销。
  9. 以普通用户身份登录计算机。
  10. 尝试使用 Visual Studio .NET 创建自定义事件日志,然后尝试使用基于 Visual Studio .NET 构建的应用程序写入此事件日志。
以管理员身份安装自定义事件日志
  1. 以管理员身份登录计算机。
  2. 使用 Visual Studio .NET 中的 CreateEventSource 方法创建自定义事件日志和事件日志源。
  3. 从管理员帐户注销。
  4. 以普通用户身份登录计算机。
  5. 通过运行应用程序将条目写入自定义事件日志。

问题清楚了,而且还找到了事件日志在注册表中位置,下次可以直接删除你不想要的测试日志了。

 

原创粉丝点击