将ASP.NET应用迁移到IIS7时出现注册表访问错误

21

我正在运行Windows 7 64位和IIS7。我正在尝试设置一个之前在XP的IIS6上的Web应用程序。它给我下面的错误。我已将网络服务用户添加到性能监视器用户组,但仍然无效。

拒绝访问注册表项“Global”。说明:执行当前Web请求时发生未处理的异常。请查看堆栈跟踪以获取有关错误的更多信息及其在代码中的起源。

异常详细信息:System.UnauthorizedAccessException: 拒绝访问注册表项“Global”。

ASP.NET没有被授权访问所请求的资源。考虑授予ASP.NET请求标识对资源的访问权限。ASP.NET具有基本进程标识(在IIS 5上通常为{MACHINE}\ASPNET或在IIS 6上为Network Service),如果应用程序未模拟,则使用该标识。如果应用程序通过模拟进行模拟,则标识将是匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户。

要授予ASP.NET访问文件的权限,请右键单击资源管理器中的文件,选择“属性”,然后选择“安全”选项卡。单击“添加”以添加适当的用户或组。突出显示ASP.NET帐户,选中所需访问权限的复选框。

注:将HTML标签保留。
6个回答

23

问题在于Windows中的用户被称为DefaultAppPool,但他在安全对话框中并没有显示出来。虽然这个用户是真实存在的,但我的问题是我需要将该用户添加到PerformanceMonitorUsers组,因为我的Web服务正在使用PerformanceCounters。结果发现您必须通过命令行来完成。

net localgroup "Performance Monitor Users" DefaultAppPool /add

有时会出现不起作用的情况,并显示错误:“不存在此用户或组:DefaultAppPool”。

通过以下不同的方式添加用户:

  1. 进入Windows 7的开始菜单。
  2. 在搜索栏中键入“编辑用户”。
  3. 打开“编辑本地用户和组”。
  4. 转到组文件夹。
  5. 右键单击“性能监视器用户”组并转到属性。
  6. 点击添加...按钮。
  7. 输入“IIS APPPool\DefaultAppPool”,然后单击检查名称。
  8. 点击确定,这样您就完成了。

2
请注意,您的应用程序可能不使用DefaultAppPool,例如“ASP.NET v4.0”,还要注意可能需要重新启动Windows。 - Pavel Savara
1
如果新的配置设置没有立即生效,那么运行 iisreset 可能会有所帮助。 - Chris O
这个方法很有效,我之前并不知道我的应用程序在使用任何PerformanceCounters,但是我已经尝试了这个修复方法并重启了IIS,结果它奏效了! - rocketdoctor
我认为从2016年开始(至少),该组可能是IIS_IUSRS。 - MultiMat

11

使用net localgroup "Performance Monitor Users" "IIS AppPool\DefaultAppPool" /add命令


2

我曾经遇到了同样的问题,按照上面讨论的进行了相同的设置,但对我没有起作用。最终发现需要进行以下更改:

  1. 进入IIS (inetmgr.exe)。
  2. 检查你的应用程序AppPool的高级设置。
  3. Managed PipeLine模式应该是Integrated。
  4. Process model identity应该是Network Service。

这在我的情况下有效。如果上述设置无效,或许这些更改能对你有所帮助。


1

感谢Fande455

在迁移我的Web应用程序后,我遇到了这个问题。我确实在我的应用程序中引用了性能计数器,而且我确实遇到了这个问题。对我来说,这是一个普通的问题,在IIS6和Windows 7上,在Performance Monitor Users组中添加通常的IIS用户可以解决问题。然而,在运行IIS7的Windows Server 2008上,情况并非如此,这篇文章确实拯救了我。

非常感谢,我更新了原始帖子Here


0

基本上你需要遵循指示,但是要查看你的应用程序池的配置,你需要找到执行用户帐户,并授予该用户访问适当权限。


我的应用程序池正在使用“ApplicationPoolIdentity”用户。Web服务正在尝试访问注册表中的“Global”键。但是该用户没有访问注册表的权限。我正在努力找出如何授予该用户访问权限?或者甚至只是找出该用户是谁? - Ben Anderson

0

仅补充一下,我发现在几个场合下,我必须重新启动整个服务器才能使更改生效,仅重启Web发布服务是不够的。如果有人知道正确的服务组合来重新启动,请添加答案。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接