我对这个问题有一个答案/解决方法。
首先,我不同意(尊重地)评论中使用AppCompatFlags不是“配置应用程序和安装程序的正确方式”这一说法。修改注册表中的此部分只是镜像使用Windows GUI更改可执行文件的特权级别。我发现这种方法比添加清单文件更容易实现。如果用户想要或需要更改特权级别而不作为管理员运行,他们可以轻松地使用GUI来完成。
无论如何,我遇到了同样的问题,试图将可执行文件的权限级别设置为以管理员身份运行。我们知道我们可以使用GUI设置它:
- 右键单击快捷方式或.EXE文件,选择 属性
- 单击 兼容性 选项卡
- (此时,您可以为自己或所有用户设置特权级别;我更喜欢为所有用户进行设置)
- 单击按钮,更改所有用户的设置
- 一个新的属性窗口打开,标题为“所有用户的兼容性”
- 在特权级别下,勾选“以管理员身份运行此程序”,点击几次 OK 以保存更改。
当更改保存后,您会在注册表中找到该设置:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
当我使用GUI设置.exe
以管理员身份运行时,它总是有效的。
然而,每当我试图直接通过更改注册表而不通过GUI来进行更改时,程序就无法作为管理员运行。注册表显示我已经进行了更改,并且当我查看可执行文件的特权级别时,“以管理员身份运行”被勾选上了。
我尝试了几种不同的方法来通过仅更改注册表使.exe
以管理员权限运行:
- 手动使用regedit编辑注册表
- 从
.reg
文件导入更改
- 使用命令行工具reg.exe更改注册表
- 使用现在已废弃的Wise Script工具
- 使用AutoIT脚本编写
所有这些方法都做了同样的事情。注册表已更改,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"
如果您更改这两个注册表部分,那么.exe
将以管理员身份运行。更重要的是,如果不同的用户登录到PC,则该程序将作为管理员运行。尽管没有针对后续用户在HKCU部分进行注册表更改。
我不知道发生了什么,但它正在运行。