“__COMPAT_LAYER”实际上做了什么?

最近,我试图给我的应用程序pipe理员权限没有系统要求“你想给pipe理员权限? 我发现了一个完美的工作方式。

我find解决scheme

我创build了一个名为nonadmin.bat的bat文件,并在其中编写了下面的代码

cmd min C set __COMPAT_LAYER=RunAsInvoker && start %1 

如果我们拖动它的任何exe文件,它给了他们pipe理员权限(在没有让我访问环境variables之前,但在拖拽文件之后,它确实工作)。

现在我的问题是:

  1. 实际上'__COMPAT_LAYER'是什么意思,它是做什么的?
  2. 我如何删除这样的事情,以便再次要求pipe理员权限?
  3. 这是否会降低系统安全性?

__COMPAT_LAYER,以及如何使用它
__COMPAT_LAYER是一个系统环境变量,它允许您设置兼容性图层,这是您右键单击可执行文件时可以调整的设置,选择“属性”,然后转到“兼容性”选项卡。

Imgur

除了您所了解的信息之外,还有几个选项供您选择 :

  • 256色 – 以256色运行
  • 640×480 – 以640×480屏幕分辨率运行
  • DisableThemes – 禁用视觉主题
  • Win95 – 在Windows 95的兼容模式下运行程序
  • Win98 – 在Windows 98 / ME的兼容模式下运行程序
  • Win2000 – 在Windows 2000的兼容模式下运行程序
  • NT4SP5 – 在Windows NT 4.0 SP5的兼容模式下运行程序

您可以使用多个选项将它们分隔一个空格: set __COMPAT_LAYER=Win98 640x480

取消设置__COMPAT_LAYER变量
只要变量存在,这些设置就会一直存在。 当变量被设置的命令提示符关闭时,或者变量被手动取消set __COMPAT_LAYER=命令时,变量set __COMPAT_LAYER=

由于您正在通过批处理脚本设置变量,所以一旦拖动到其上的可执行文件完成并且脚本关闭,变量就会自动取消设置。 需要注意的是,变量设置会保留在您选择的可执行文件所产生的任何子进程中。

使用__COMPAT_LAYER的安全性
将__COMPAT_LAYER设置为RunAsInvoker 实际上并不给你管理员权限,如果你没有这些权限的话 ; 它只是防止出现UAC弹出窗口,然后以任何用户的身份运行该程序 。 因此,使用它是安全的,因为你不是神奇地获得管理权限。

您也可以将变量设置为RunAsHighest (如果您拥有管理员权限,则只触发UAC,但如果您没有管理员权限则不授予管理权限)或RunAsAdmin(始终触发UAC)。