如何允许.NET应用程序的注册(写)访问?

cnd*_*cnd 1 .net c# registry uac

我有错误信息:

请求的注册表访问被拒绝

当试图通过打开UAC 写入注册密钥时:

RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, "")
tawkey.OpenSubKey(x, true).SetValue(X, V, RegistryValueKind.DWord)
Run Code Online (Sandbox Code Playgroud)

在我的软件安装过程中,我必须运行"subinacl/subkeyreg HKEY_LOCAL_MACHINE\PathToMyKeys .../grant = user = f"吗?或者还有其他方法可以访问我的注册表项?

谢谢.

Dav*_*nan 6

如果您希望写入密钥HKLM,则需要升级过程.这可以通过在应用程序的清单中设置requestedExecutionLevel来实现requireAdministrator.

进行此更改意味着您的应用程序每次运行时都会显示一个UAC提升对话框.这无疑会令人恼火,所以这里有一些避免这种刺激的选择:

  1. 写入除HLKM标准用户具有写访问权限之外的其他位置.
  2. HLKM在安装程序中执行写入.
  3. 如果HLKM仅在程序中偶尔使用的功能需要写入,请安排按需提升.

备选方案3需要一点阐述.一旦进程启动,您就无法提升它.您只能在流程开始时提升.因此,为了实现选项3,您需要将该功能存在于单独的进程或进程外的COM服务器中.如果沿着这条路走下去,请记住在导致UAC对话的任何UI元素上包含盾牌图标.

  • 你能解释一下ClickOnce的用武之地吗?我没有在你的问题中看到这一点.FWIW我理解ClickOnce和UAC提升并不是一起来的:http://www.geektieguy.com/2007/08/25/getting-vista-uac-elevation-to-work-for-web-deployed-clickonce -applications / (2认同)