C# 当我想要更新值时,对注册表项的访问被拒绝

C# 当我想要更新值时,对注册表项的访问被拒绝,c#,registry,C#,Registry,我想要编辑名为“usbstor”的注册表项值,这是我在更新方法中的代码 try { string path = baseRegistryKey + "\\" + SubKey; Registry.SetValue(path, KeyName, KeyValue, RegistryValueKind.DWord); return true; } catch (Excepti

我想要编辑名为“usbstor”的注册表项值,这是我在更新方法中的代码

  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打开密钥,右键单击并选择“权限”。添加应用程序在其下运行的配置文件(即服务帐户)或选择现有组(即用户)并授予他们完全访问权限。这样,您就不必授予提升的权限,这始终是一个安全问题。

听起来像是权限问题。可能是重复的感谢,它可以工作,但我如何在代码运行时请求管理员权限?我已编辑了我的答案,以便您能够强制用户将权限提升到管理员权限(如果不存在)。若应用程序打算在任何地方使用管理员权限,那个么它应该从一开始就授予这些权限。