不允许请求的注册表访问

aba*_*hev 44 .net c# security registry uac

我正在编写一个修改实用程序来修改一些键HKEY_CLASSES_ROOT.

所有在Windows XP等下工作正常.但是我Requested registry access is not allowed在Windows 7下遇到错误.Vista和2008我也猜错了.

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

aba*_*hev 57

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>
Run Code Online (Sandbox Code Playgroud)

  • @Gunner:把它放到项目的根目录中,比如App.config.(文件 - >添加新项 - >应用程序清单文件) (4认同)
  • @Gunner:将'App.manifest`添加到VS项目的根目录,它将自动复制到输出为`<appname> .exe.manifest`或嵌入到程序集中 (2认同)

Ken*_*ite 18

除非您拥有管理权限,否则您无法在Vista和更新版本的Windows中写入HKCR(或HKLM)配置单元.因此,您需要在运行实用程序之前以管理员身份登录,为其提供一个清单,说明它需要管理员级别(这将提示用户输入管理员登录信息),或者退出更改非 - 管理员不应该玩.:-)

  • 别客气.:-)抱歉,我无法发布正确的清单,但我没有在这台机器上找到一个,并且想知道是否有人必须搜索一个,它可能也是你.<G> (2认同)

Dav*_*vy8 17

如果您不需要整个应用程序的admin privs,或者只需要进行一些不频繁的更改,您可以在新进程中执行更改并使用以下命令启动它:

Process.StartInfo.UseShellExecute = true;
Process.StartInfo.Verb = "runas";
Run Code Online (Sandbox Code Playgroud)

这将以管理员的身份运行该过程,以便使用注册表执行任何操作,但使用正常的权限返回到您的应用程序.这样,每次启动时都不会提示用户使用UAC对话框.


Bri*_*ian 6

作为临时修复,用户可以右键单击该实用程序并选择"以管理员身份运行".