最近,我试图授予我的应用程序管理员权限,而无需系统询问“您想授予管理员权限吗?”,我找到了一种完美运行的方法。
我找到的解决方案
我创建了一个名为 nonadmin.bat 的bat文件,并在其中写入了以下代码
cmd min C set __COMPAT_LAYER=RunAsInvoker && start "" %1
如果我们在上面拖动任何exe文件,它就会赋予他们管理员权限(之前它不允许我在没有它的情况下访问环境变量,但在将文件拖动到bat上之后它确实起作用了)。
问题
现在我的问题是:-
__COMPAT_LAYER,以及如何使用它
__COMPAT_LAYER 是一个系统环境变量,允许您设置兼容性层,您可以在右键单击可执行文件、选择“属性”并转到“兼容性”选项卡时调整这些设置。
除了您了解的选项之外,还有多种选项可供选择:
您可以通过用空格分隔来使用多个选项:
set "__COMPAT_LAYER=Win98 640x480"
取消设置 __COMPAT_LAYER 变量
只要变量存在,这些设置就会一直存在。当设置变量的命令提示符关闭时,或者使用命令
set __COMPAT_LAYER=
手动取消设置变量时,变量将停止存在。
由于您是通过批处理脚本设置变量,因此一旦您拖动到变量上的可执行文件完成并且脚本关闭,该变量就会自动取消设置。请务必注意,变量设置会保留到由您选择的可执行文件生成的任何子进程。
使用__COMPAT_LAYER的安全性
将 __COMPAT_LAYER 设置为 RunAsInvoker 如果您没有管理员权限,实际上并不会为您提供管理员权限;它只是阻止出现 UAC 弹出窗口,然后 以任何用户调用的方式运行该程序 。因此,使用它是安全的,因为您不会神奇地获得管理员权限。
您还可以将该变量设置为 RunAsHighest(仅在您拥有管理员权限时触发 UAC,但如果您没有管理员权限则不会授予管理员权限)或 RunAsAdmin(始终触发 UAC)。