“__COMPAT_LAYER”实际上是做什么的?
What does '__COMPAT_LAYER' actually do?
最近,我试图在没有系统询问“您要授予管理员权限吗?” 的情况下授予我的 应用程序管理员权限,并且我找到了一种运行良好的方法。
我找到的解决方案
我创建了一个名为 nonadmin.bat 的 bat 文件,并在其中编写了以下代码
cmd min C set __COMPAT_LAYER=RunAsInvoker && start "" %1
如果我们将任何 exe 拖到它上面,它就会赋予他们管理员权限(之前它不允许我在没有它的情况下访问环境变量,但是在将文件拖到 bat 上之后它确实有效)。
问题
现在我的问题是:-
- “__COMPAT_LAYER”的实际含义及其作用是什么?
- 我如何删除这样的东西,以便它再次请求管理员权限?
- 这会降低系统安全性吗?
__COMPAT_LAYER,以及如何使用它
__COMPAT_LAYER 是一个系统环境变量,允许您设置兼容性层,这些设置是您可以在右键单击可执行文件时调整的设置,select 属性,然后转到兼容性选项卡。
除了你知道的还有several options to choose from个:
- 256Color - 以 256 色运行
- 640x480 - 以 640x480 屏幕分辨率运行
- DisableThemes - 禁用视觉主题
- Win95 - 在 Windows 95
的兼容模式下运行程序
- Win98 - 在 Windows 98/ME
的兼容模式下运行程序
- Win2000 - 在 Windows 2000
的兼容模式下运行程序
- NT4SP5 - 在 Windows NT 4.0 SP5
的兼容模式下运行程序
您可以使用多个选项,用 space 分隔它们:set "__COMPAT_LAYER=Win98 640x480"
取消设置 __COMPAT_LAYER 变量
只要变量存在,这些设置就会一直存在。当关闭设置变量的命令提示符或使用命令 set __COMPAT_LAYER=
.
手动取消设置变量时,变量将停止存在
由于您是通过批处理脚本设置变量的,一旦您拖到变量上的可执行文件完成并且脚本关闭,变量就会自动取消设置。重要的是要注意,变量设置会持续到您 select.
的可执行文件生成的任何子进程。
使用的安全性__COMPAT_LAYER
将 __COMPAT_LAYER 设置为 RunAsInvoker 如果您没有管理员权限,实际上不会给您管理员权限;它只是阻止了 UAC 弹出窗口的出现,然后 runs the program as whatever user called it。因此,使用它是安全的,因为您并没有神奇地获得管理员权限。
您还可以将变量设置为 RunAsHighest(只有在您拥有管理员权限时才触发 UAC,但如果您没有管理员权限也不授予管理员权限)或 RunAsAdmin(始终触发 UAC)。
最近,我试图在没有系统询问“您要授予管理员权限吗?” 的情况下授予我的 应用程序管理员权限,并且我找到了一种运行良好的方法。
我找到的解决方案
我创建了一个名为 nonadmin.bat 的 bat 文件,并在其中编写了以下代码
cmd min C set __COMPAT_LAYER=RunAsInvoker && start "" %1
如果我们将任何 exe 拖到它上面,它就会赋予他们管理员权限(之前它不允许我在没有它的情况下访问环境变量,但是在将文件拖到 bat 上之后它确实有效)。
问题
现在我的问题是:-
- “__COMPAT_LAYER”的实际含义及其作用是什么?
- 我如何删除这样的东西,以便它再次请求管理员权限?
- 这会降低系统安全性吗?
__COMPAT_LAYER,以及如何使用它
__COMPAT_LAYER 是一个系统环境变量,允许您设置兼容性层,这些设置是您可以在右键单击可执行文件时调整的设置,select 属性,然后转到兼容性选项卡。
除了你知道的还有several options to choose from个:
- 256Color - 以 256 色运行
- 640x480 - 以 640x480 屏幕分辨率运行
- DisableThemes - 禁用视觉主题
- Win95 - 在 Windows 95 的兼容模式下运行程序
- Win98 - 在 Windows 98/ME 的兼容模式下运行程序
- Win2000 - 在 Windows 2000 的兼容模式下运行程序
- NT4SP5 - 在 Windows NT 4.0 SP5 的兼容模式下运行程序
您可以使用多个选项,用 space 分隔它们:set "__COMPAT_LAYER=Win98 640x480"
取消设置 __COMPAT_LAYER 变量
只要变量存在,这些设置就会一直存在。当关闭设置变量的命令提示符或使用命令 set __COMPAT_LAYER=
.
由于您是通过批处理脚本设置变量的,一旦您拖到变量上的可执行文件完成并且脚本关闭,变量就会自动取消设置。重要的是要注意,变量设置会持续到您 select.
的可执行文件生成的任何子进程。使用的安全性__COMPAT_LAYER
将 __COMPAT_LAYER 设置为 RunAsInvoker 如果您没有管理员权限,实际上不会给您管理员权限;它只是阻止了 UAC 弹出窗口的出现,然后 runs the program as whatever user called it。因此,使用它是安全的,因为您并没有神奇地获得管理员权限。
您还可以将变量设置为 RunAsHighest(只有在您拥有管理员权限时才触发 UAC,但如果您没有管理员权限也不授予管理员权限)或 RunAsAdmin(始终触发 UAC)。