我正在编写一个调整实用程序来修改HKEY_CLASSES_ROOT
下的某些键。
所有在Windows XP等下运行正常。但是我在Windows 7下遇到错误Requested registry access is not allowed
。Vista和2008我也是。
如何修改代码以添加UAC支持?
答案 0 :(得分:56)
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>
答案 1 :(得分:17)
除非您拥有管理权限,否则您无法在Vista和更新版本的Windows中写入HKCR(或HKLM)配置单元。因此,您需要在运行实用程序之前以管理员身份登录,为其提供一个清单,说明它需要管理员级别(这将提示用户输入管理员登录信息),或者退出更改非 - 管理员不应该玩。 : - )
答案 2 :(得分:17)
如果您不需要整个应用程序的管理员权限,或者只需要进行一些不经常的更改,您可以在新流程中进行更改并使用以下命令启动它:
Process.StartInfo.UseShellExecute = true;
Process.StartInfo.Verb = "runas";
将以管理员身份运行该过程,以便通过注册表执行您需要的任何操作,但使用正常的权限返回到您的应用程序。这样,每次启动时都不会提示用户使用UAC对话框。
答案 3 :(得分:5)
作为临时修复,用户可以右键单击该实用程序并选择“以管理员身份运行”。
答案 4 :(得分:2)
我正在尝试verb = "runas"
,但在尝试更新注册表值时仍然遇到UnauthorizedAccessException。原来这是因为没有打开可写设置为true的子键。
Registry.OpenSubKey("KeyName", true);
Cannot write to Registry Key, getting UnauthorizedAccessException
答案 5 :(得分:1)
此问题与向运行应用程序的用户帐户授予必要的授权有关。要阅读类似的情况和针对正确解决方案的详细响应(如Microsoft所述),请随时访问此帖子:http://rambletech.wordpress.com/2011/10/17/requested-registry-access-is-not-allowed/
答案 6 :(得分:0)
您可以执行与abatishchev相同的操作,但不需要UAC
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<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">
</requestedPrivileges>
</security>
</trustInfo>
</assembly>