2016-06-17 286 views
7

最近,我试图给我的应用程序管理员权限没有系统询问“你想给管理员权限?”我发现了一种完美的工作方式。'__COMPAT_LAYER'实际上做了什么?

解决方案,我发现

我创建了一个名为一个bat文件nonadmin.bat并在上面写了下面的代码

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

,如果我们拖动任意exe文件就可以了,它给他们管理员权限(在没有它的情况下不让我访问环境变量之前,但在拖拽文件之后,它确实工作)。

问题

现在我的问题是: -

  1. 究竟是什么 '__COMPAT_LAYER' 手段,它有什么作用?
  2. 我如何删除这样的事情,以便它再次要求管理员权限?
  3. 这是否会降低系统安全性?
+0

这是说什么。设置兼容性选项。您的示例仅适用于管理员。非管理员将会报错。 –

+0

@Noodles可以请你详细说明并解释这3个问题的答案。 –

+4

大概应该读'cmd/min/c ...'? – TripeHound

回答

14

__COMPAT_LAYER,以及如何使用它
__COMPAT_LAYER是一个系统环境变量,它允许您设置兼容层,这是设置,您可以调整,当你在一个可执行文件,选择属性,单击鼠标右键,并转到兼容性选项卡。

Imgur

several options to choose from除了你了解一个:

  • 256Color - 运行在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=时,变量停止存在。

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

使用__COMPAT_LAYER
设置__COMPAT_LAYER到RunAsInvoker 安全实际上并没有给你管理员权限,如果你没有他们;它只是防止出现UAC弹出窗口,然后runs the program as whatever user called it。因此,使用它是安全的,因为你不是神奇地获得管理权限。

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

+0

谢谢你的详细解释我的朋友,但我需要知道2件事情。 1)我已经读过它是一个环境变量,但是每当我在环境变量中搜索它时,都没有提到这样的事情。 2)正如你所说的取消设置它,我需要写“set __COMPAT_LAYER =”或“set __COMPAT_LAYER = NULL”,但是当我执行这些命令时,UAC提示不会再出现。我该怎么做才能让他们重新出现? –

+0

我无法复制您的问题,但正如我在最后一句中所说的,您应该能够说'set __COMPAT_LAYER = RunAsAdmin' – SomethingDark

+0

@Agent_Spock:默认情况下存在一些环境变量,其中一些仅在您设置时才存在;这是后者之一。另外,如果双击相关的可执行文件,不会再提示UAC提示,这可能表明它不包含清单,告诉Windows它是否需要提升。当发生这种情况时,Windows会做出猜测。因此,Windows可能已经注意到,您已成功将其作为非管理员运行,并决定遵循套件。无论如何,除非您在注册表中或通过控制面板永久设置环境变量,否则这不是原因。 –

相关问题