如何启用 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' 的写访问?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 powershell 以编程方式查找用户 HKEY_USERS 注册表项?