'__COMPAT_LAYER'实际上做了什么?

时间:2016-06-17 09:38:10

标签: windows batch-file compatibility administrator admin-rights

最近,我试图在没有系统询问“你想给予管理员权限吗?”的情况下授予我的应用程序管理员权限,并且我找到了一种工作正常的方法。

我找到的解决方案

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

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

如果我们在它上面拖动任何exe,它就会赋予它们管理员权限(在它没有让我访问环境变量之前没有它但是在将文件拖放到bat之后它确实有效)。

问题

现在我的问题是: -

  1. 实际上'__COMPAT_LAYER'意味着什么,它做了什么?
  2. 如何删除此类内容以便再次请求管理员权限?
  3. 这是否会降低系统安全性?

1 个答案:

答案 0 :(得分:18)

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

Imgur

除了你所知道的那个之外还有several options to choose from

  • 256Color - 以256色运行
  • 640x480 - 以640x480的屏幕分辨率运行
  • 禁用主题 - 禁用视觉主题
  • 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=手动取消设置变量时,变量将停止存在。

由于您是通过批处理脚本设置变量,因此一旦拖动到它的可执行文件完成并且脚本关闭,该变量就会自动取消设置。请务必注意,变量设置会持久保存到由您选择的可执行文件生成的任何子进程。

使用__COMPAT_LAYER的安全性
将__COMPAT_LAYER设置为RunAsInvoker 实际上并不提供管理员权限(如果您没有);它只是阻止UAC弹出窗口出现,然后runs the program as whatever user called it。因此,使用它是安全的,因为您并没有神奇地获得管理员权限。

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