注册表中的RUNASADMIN似乎无法在Windows 7中运行

Jim*_*Del 10 c# uac windows-7

一段时间以来,我的程序的安装程序使用以下代码使我的应用程序以管理员权限运行.但它似乎在Windows 7下没有任何效果.在Vista中,它工作得很漂亮.如果我右键单击快捷方式并告诉它作为管理员运行,程序将正常启动.但是通过使用下面的代码,它应该一直以这种方式运行程序.它不再了.有谁知道Win 7是否仍然使用此密钥?UAC也是顺便提一下.

Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\
CurrentVersion\AppCompatFlags\Layers", "C:\App\app.exe", "RUNASADMIN");
Run Code Online (Sandbox Code Playgroud)

谢谢.

小智 9

我对这个问题有一个答案/解决方法.

首先,我不同意(尊重地)使用AppCompatFlags不是"配置应用程序和安装程序的正确方法"的评论.修改注册表的这一部分只是使用Windows GUI镜像来更改可执行文件的权限级别.我发现这个方法比添加清单文件更容易实现.如果用户想要或需要将权限级别更改为不以管理员身份运行,则可以使用GUI轻松完成.

无论如何,我有同样的问题,试图将可执行文件的权限级别设置为以管理员身份运行.我们知道我们可以使用GUI设置它:

  • 右键单击快捷方式或.EXE文件,然后选择"属性"
  • 单击"兼容性"选项卡
  • (此时您可以为您或所有用户设置权限级别;我更喜欢为所有用户执行此操作)
  • 单击"更改所有用户的设置"按钮
  • 打开一个新的"属性"窗口,其中包含标题为"所有用户的兼容性"的选项卡
  • 在"权限级别"下,选中"以管理员身份运行此程序",单击"确定"几次以保存更改.

保存更改后,您将在注册表中找到该设置:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
Run Code Online (Sandbox Code Playgroud)

当我.exe以这种方式使用GUI 将其设置为以管理员身份运行时,它始终有效.

但是,每当我尝试直接更改注册表而不通过GUI时,程序就不会以管理员身份运行.注册表显示我进行了更改,当我查看可执行文件的权限级别时,将以管理员身份运行方式进行检查.

我尝试了几种不同的方法.exe,只需更改注册表即可以管理员身份运行:

  • 使用regedit手动编辑注册表
  • .reg文件导入更改
  • 使用命令行工具reg.exe更改注册表
  • 使用现已解散的Wise Script工具
  • 使用AutoIT Scripting

所有这些方法都做了同样的事情.注册表已更改,GUI显示该程序应以管理员身份运行,但该程序从不作为管理员运行.

我偶然发现的这个问题的解决方法是继续使用设置更改HKCU密钥和HKLM密钥.

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
Run Code Online (Sandbox Code Playgroud)

如果您更改这两个注册表部分,则将.exe以管理员身份运行.更重要的是,如果其他用户登录到PC,程序将以管理员身份运行.尽管注册表更改没有为后续用户制作HKCU部分.

我不知道这里发生了什么,但它正在发挥作用.


Lex*_* Li 6

我使用的是Windows 7,我可以看到这样的密钥.但是,我认为这不是配置应用程序和安装程序的正确方法.

我的建议是您将清单文件与应用程序(app.exe)一起分发.如果您使用的是Visual Studio 2008,则清单文件甚至可以轻松嵌入可执行文件中.然后在清单文件中,您可以要求管理员权限.

http://msdn.microsoft.com/en-us/library/bb756929.aspx

http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx

http://channel9.msdn.com/posts/jmazner/How-To-Tell-Vistas-UAC-What-Privelege-Level-Your-App-Requires/