C# 当我想要更新值时,对注册表项的访问被拒绝
我想要编辑名为“usbstor”的注册表项值,这是我在更新方法中的代码C# 当我想要更新值时,对注册表项的访问被拒绝,c#,registry,C#,Registry,我想要编辑名为“usbstor”的注册表项值,这是我在更新方法中的代码 try { string path = baseRegistryKey + "\\" + SubKey; Registry.SetValue(path, KeyName, KeyValue, RegistryValueKind.DWord); return true; } catch (Excepti
try
{
string path = baseRegistryKey + "\\" + SubKey;
Registry.SetValue(path, KeyName, KeyValue, RegistryValueKind.DWord);
return true;
}
catch (Exception e)
{
// AAAAAAAAAAARGH, an error!
ShowErrorMessage(e, "Writing registry " + KeyName.ToUpper());
return false;
}
和path=“HKEY\U LOCAL\U MACHINE\system\currentControlset\services\usbstor”keyname=“start”运行代码时,我将获得“对注册表项“HKEY\U LOCAL\U MACHINE\system\currentControlset\services\usbstor”的访问被拒绝”
什么是问题?可执行文件
HKEY_LOCAL_机器
在注册表中始终是受保护的空间,因此您需要将权限授予至少超级用户
的权限,或者以管理员身份运行可执行的(从您的解决方案中构建的,应该位于/bin
文件夹中)或禁用UAC
。无论哪种方式,只要您没有配置/设置任何一种方式,在VisualStudio内部都会很麻烦
请注意,如果您尝试使用Run..->regedit
UAC也会提示您,所以这不仅是对您的应用程序的限制,也是对注册表本身访问的限制
VisualStudio内部
在打开到以管理员身份运行之前提升Visual Studio就足以从代码中编辑注册表
应用程序清单
为了将来使用,您可能需要创建app.manifest
,并将应用程序设置为始终需要管理员权限。
右键单击解决方案资源管理器中的项目,然后:添加->新建项目…->应用程序清单文件
。
在新创建的应用程序清单中,更改以下行:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
排队
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
从现在起,如果不是以管理员身份运行,它将始终提示UAC。
如果您以非管理员身份运行Visual Studio,它将尝试以管理员身份重新启动IDE,并在继续之前提示您这样做。另一种解决方案是更改注册表项的权限。使用Regedit打开密钥,右键单击并选择“权限”。添加应用程序在其下运行的配置文件(即服务帐户)或选择现有组(即用户)并授予他们完全访问权限。这样,您就不必授予提升的权限,这始终是一个安全问题。听起来像是权限问题。可能是重复的感谢,它可以工作,但我如何在代码运行时请求管理员权限?我已编辑了我的答案,以便您能够强制用户将权限提升到管理员权限(如果不存在)。若应用程序打算在任何地方使用管理员权限,那个么它应该从一开始就授予这些权限。