请求的registry访问是不允许的

我正在写一个调整实用工具,修改HKEY_CLASSES_ROOT下的一些键。

所有在Windows XP下工作良好等等。 但我收到错误Requested registry access is not allowed在Windows 7下。Vista和2008我也猜。

我应该如何修改我的代码来添加UAC支持?

app.manifest应该是这样的:

 <?xml version="1.0" encoding="utf-8"?> <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app" /> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> </asmv1:assembly> 

如果您不需要整个应用程序的pipe理员权限,或者仅需要进行less量更改,则可以在新stream程中执行更改并使用以下命令启动它:

 Process.StartInfo.UseShellExecute = true; Process.StartInfo.Verb = "runas"; 

它将以pipe理员身份运行该进程,以便在registry中执行您所需的任何操作,但可以使用正常的权限返回到您的应用程序。 这样每次启动时都不会提示用户有一个UAC对话框。

除非拥有pipe理权限,否则不能在Vista和更新版本的Windows中写入HKCR(或HKLM)configuration单元。 因此,在运行实用程序之前,您需要先以pipe理员身份login,然后为其提供一个需要pipe理员级别(会提示用户inputpipe理员login信息)的清单,或者在非 – pipe理员不应该玩。 🙂

作为临时修复,用户可以右键单击该实用程序并select“以pipe理员身份运行”。

我正在尝试verb = "runas" ,但是当我尝试更新registry值时,仍然收到UnauthorizedAccessException。 原来是因为没有打开设置为true的可写的子键。

 Registry.OpenSubKey("KeyName", true); 

无法写入registry项,获取UnauthorizedAccessException

这个问题与授予应用程序运行用户帐户的必要授权有关。 要阅读类似的情况和正确的解决scheme的详细的响应,如微软logging,请随时访问这个职位: http : //rambletech.wordpress.com/2011/10/17/requested-registry-access-is-不允许/