2011-08-10 25 views
2

我有错误消息:试图当进入系统登录键如何允许注册表(写)访问我的.NET应用程序?

请求的注册表访问被拒绝

与开启UAC

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

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

谢谢。

+0

你想在远程机器上做到这一点? –

+0

不是 - 在我自己的机器上。 – Cynede

+0

如果它的alocal机器,为什么使用OpenRemoteBaseKey? – Zenwalker

回答

7

如果您想写入HKLM下的密钥,则需要升级过程。这是通过在应用程序的清单中设置requestedExecutionLevelrequireAdministrator来实现的。

进行此更改意味着您的应用程序每次运行时都会显示一个UAC提升对话框。这无疑将刺激和所以这里有避免刺激性的一些选项:

  1. 写入比HLKM地方标准的用户有写权限之外的其他地方。
  2. 在安装程序中执行写入HLKM的操作。
  3. 如果在您的程序中偶尔使用的功能只需要写入HLKM,则可以按需提升。

选项3需要一点细节。一旦它启动,你就无法提升它。您只能在流程开始时提升。因此,为了实现选项3,您需要将该功能存在于单独的进程或进程外COM服务器中。如果沿着这条路线走,请记住在任何UI元素上包含屏蔽图标,以便产生UAC对话框。

+1

得到了一个奇怪的消息:ClickOnce不支持请求执行级别'requireAdministrator' – Cynede

+2

你可以解释ClickOnce在哪里进入这个。我没有看到你的问题。 FWIW我明白ClickOnce和UAC提升并不意味着一起去:http://www.geektieguy.com/2007/08/25/getting-vista-uac-elevation-to-work-for-web-deployed-clickonce -applications / –

相关问题