如何启用 ASP.NET 对注册表项 'HKEY_CURRENT_USER\Software\myAppKey\subdir' 的写访问?

Posted

技术标签:

【中文标题】如何启用 ASP.NET 对注册表项 \'HKEY_CURRENT_USER\\Software\\myAppKey\\subdir\' 的写访问?【英文标题】:How to enable ASP.NET write access to the registry key 'HKEY_CURRENT_USER\Software\myAppKey\subdir'?如何启用 ASP.NET 对注册表项 'HKEY_CURRENT_USER\Software\myAppKey\subdir' 的写访问? 【发布时间】:2018-12-15 14:11:02 【问题描述】:

在我的 ASP.NET Web 应用程序中,My.Computer.Registry.SetValue(Key_Name, Value_Name, Metric) 导致“拒绝访问注册表项”错误。 应用程序在 Azure Windows Server 2012 VM 上运行。 但是,我的 .NET windows 应用程序也在同一个 VM 上运行,写入注册表正常。

我已经尝试设置 regedit > key: to everyone=full control,仍然被拒绝。

我在同一台计算机 (Azure Windows Server 2012 R2) 上的 .NET Windows 应用程序写入注册表项“HKEY_CURRENT_USER\Software\”和 SOFTWARE_PROGRAM_NAME _ & "\Metrics\" & Key_Name 没有问题。

这是导致问题的 ASP.NET 代码………………..

' Set the key address within the System Registry:
Key_Name = "HKEY_CURRENT_USER\Software\" & SOFTWARE_PROGRAM_NAME _
    & "\Metrics\" & Key_Name

Metric = My.Computer.Registry.GetValue(Key_Name, Value_Name, 0)  ' read present value
if metric_function = 1
    metric = 0
else if metric_function = 2
    Metric = metric_value
else
    Metric += 1                                                      ' increment it
End If
My.Computer.Registry.SetValue(Key_Name, Value_Name, Metric)      ' store new value

当我浏览我的 ASP.NET 网页时出现错误.....

Server Error in '/' Application.

Access to the registry key 'HKEY_CURRENT_USER\Software\myApp\Metrics\WEB Communication' is denied. 
Exception Details: System.UnauthorizedAccessException: Access to the registry key 'HKEY_CURRENT_USER\Software\Pray\Metrics\WEB Communication' is denied. 
Source Error: 


Line 152:               Metric += 1                                                      ' increment it
Line 153:           End If
Line 154:           My.Computer.Registry.SetValue(Key_Name, Value_Name, Metric)      ' store new value
Line 155:
Line 156:       ' Update the metrics display in the control pane:

Source File: C:\PRIMARY\INTERNET\APPS\DEPLOYED\myApp\myApp web\App_Code\Metrics.vb    Line: 154 


Stack Trace: 


[UnauthorizedAccessException: Access to the registry key 'HKEY_CURRENT_USER\Software\myApp\Metrics\WEB Communication' is denied.]
   Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str) +144
   Microsoft.Win32.RegistryKey.CreateSubKeyInternal(String subkey, RegistryKeyPermissionCheck permissionCheck, Object registrySecurityObj, RegistryOptions registryOptions) +14824601
   Microsoft.Win32.RegistryKey.CreateSubKey(String subkey) +25
   Microsoft.Win32.Registry.SetValue(String keyName, String valueName, Object value, RegistryValueKind valueKind) +78
   Microsoft.VisualBasic.MyServices.RegistryProxy.SetValue(String keyName, String valueName, Object value) +48
   Metrics.inc(Object& Key_Name, Object& Value_Name, Object metric_function, Object metric_value) in C:\PRIMARY\INTERNET\APPS\DEPLOYED\myApp\myApp web\App_Code\Metrics.vb:154
   Metrics.Communication(Object& Value_Name, Object reset_metric) in C:\PRIMARY\INTERNET\APPS\DEPLOYED\myApp\myApp web\App_Code\Metrics.vb:88
   _Default.Page_Load(Object sender, EventArgs e) in C:\PRIMARY\INTERNET\APPS\DEPLOYED\myApp\myApp web\Default.aspx.vb:142
   System.Web.UI.Control.OnLoad(EventArgs e) +103
   System.Web.UI.Control.LoadRecursive() +68
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1381

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:

您转到您的 IIS 池,打开高级属性。在那里,您可能会看到一些默认身份被选为您的池的身份。在那里,您需要设置一个有权访问文件系统和相应的注册表的身份。我通常创建一个具有管理员权限和永久密码的本地用户,然后使用该本地管理员作为我的 IIS 应用程序的身份。这样我就不用担心应用程序是否需要写入文件等

【讨论】:

这救了我的命。谢谢。

以上是关于如何启用 ASP.NET 对注册表项 'HKEY_CURRENT_USER\Software\myAppKey\subdir' 的写访问?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 5 - 如何拥有可选依赖项?

如何使用 powershell 以编程方式查找用户 HKEY_USERS 注册表项?

Microsoft Edge 中 Flash 的注册表项

如何删除注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\rising

删除 HKEY_CURRENT_USER 注册表项(卸载)

innosetup如何往注册表写入多条