在C#中创建注册表项时拒绝访问

Ali*_*Ali 2 c# registry access-denied

我试图在以下位置创建一个注册表项,但我得到访问被拒绝错误:

HKEY_LOCAL_MACHINE\SOFTWARE\MyCompany的\ MyProgram

这是代码:

RegistryKey reg;
reg = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\MyCompany\MyProgram");
Run Code Online (Sandbox Code Playgroud)

Mar*_*age 6

您最有可能使用用户帐户控制(UAC).这意味着即使您是管理员,您的访问令牌也没有必要的权限来执行创建注册表项等操作HKEY_LOCAL_MACHINE.

但是,通过UAC提示,您可以提升您的权限.

Regedit包含一个UAC清单,它将在执行之前引发提示,确保它可以执行它需要能够执行的操作.您还可以右键单击可执行文件或快捷方式,然后选择以管理员身份运行.

所以基本上你有三个选择:

  • 关闭UAC
  • 使用以管理员身份运行
  • 在可执行文件中包含UAC清单

第一种解决方案不太安全,最后的解决方案是最优雅的(但也是实际需要一些努力的解决方案).


Dar*_*rov 5

您需要在具有足够权限的帐户下运行您的应用程序,以便在指定位置写入注册表.通常,HKEY_LOCAL_MACHINE分支是为高级用户保留的,因为它包含机器全局设置.

  • 你可以在C#中添加一个Application Manifest文件,然后取消注释以下行:<requestedExecutionLevel level ="requireAdministrator"uiAccess ="false"/> (2认同)