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

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. 通过运行应用程序将条目写入自定义事件日志。

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

 

<think>好的,我需要解决用户提出的HTTP 405 Method Not Allowed错误的问题。首先,我要理解这个错误的含义。根据引用[1]和[2],这个错误通常是由于客户端使用的HTTP方法被服务器允许所导致的。比如,使用DELETE方法但服务器没有配置支持,就会返回405。 接下来,我需要整理可能的原因。常见的原因包括服务器配置正确,比如IIS可能没有启用特定的HTTP方法。另外,Web应用程序的代码或路由设置可能限制了某些方法,或者跨域(CORS)配置当也会引发这个问题。 然后是解决方案部分。根据引用[1]提到的IIS部署问题,可能需要检查处理程序映射,确保对应的HTTP方法被允许。例如,在IIS中启用DELETE或PUT方法。引用[2]提到ASP.NET WebAPI中HttpDelete方法的问题,可能需要在web.config中添加相关的设置,或者在代码中正确配置路由和属性。 同时,还要考虑其他可能性,比如防火墙或中间件拦截了某些请求方法,或者API端点没有正确定义支持的方法。CORS配置也需要检查,确保允许的HTTP方法列表包含客户端使用的方法。 最后,用户可能需要逐步排查,从检查服务器配置开始,到验证代码中的路由和方法属性,以及测试中间件和CORS设置。另外,使用工具如Postman发送请求,查看响应头中的Allowed Methods信息,可以更快定位问题。 需要确保回答结构清晰,分点列出原因和解决方案,并引用提供的资料。同时,生成的相关问题要围绕HTTP方法错误展开,帮助用户进一步了解相关问题。</think>### HTTP 405 Method Not Allowed 错误原因及解决方案 #### 错误原因 1. **HTTP方法未启用** 服务器(如IIS)未配置允许客户端使用的HTTP方法(如`DELETE`、`PUT`等)。例如,部署ASP.NET WebAPI时,若未显式启用`HttpDelete`方法,调用时会返回405错误[^2]。 2. **路由或控制器配置错误** Web应用程序未正确定义支持特定HTTP方法的路由或控制器方法。例如,未使用`[HttpDelete]`特性标注API端点[^2]。 3. **跨域(CORS)限制** CORS策略未包含客户端使用的HTTP方法,导致请求被浏览器拦截[^1]。 4. **中间件或防火墙拦截** 反向代理、负载均衡器或安全软件可能过滤了特定HTTP方法。 --- #### 解决方案 1. **启用服务器支持的HTTP方法(以IIS为例)** - 打开IIS管理器,选择站点,进入**处理程序映射**。 - 找到`ExtensionlessUrlHandler-Integrated-4.0`,双击打开。 - 在**请求限制** → **动词**中,添加允许的方法(如`DELETE`、`PUT`)或选择**全部动词**。 2. **配置ASP.NET WebAPI** - 在`Web.config`中添加以下配置,允许所有HTTP方法: ```xml <system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" /> <!-- 禁用WebDAV模块 --> </modules> </system.webServer> ``` - 在控制器方法上明确标注HTTP方法特性: ```csharp [HttpDelete] public IHttpActionResult DeleteItem(int id) { ... } ``` 3. **检查CORS配置** 确保CORS策略包含允许的HTTP方法: ```csharp // 在Startup.cs中配置 config.EnableCors(new EnableCorsAttribute("*", "*", "GET,POST,PUT,DELETE")); ``` 4. **验证中间件设置** 检查反向代理(如Nginx)或防火墙规则,确保未过滤特定方法。 --- #### 调试建议 - 使用Postman或curl发送请求,观察响应头中的`Allow`字段,确认服务器支持的方法列表。 - 检查服务器日志,定位具体拦截环节(如IIS日志或应用程序日志)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值