Windows “兼容层”实际上是做什么的?

Windows “兼容层”实际上是做什么的?,windows,batch-file,compatibility,administrator,admin-rights,Windows,Batch File,Compatibility,Administrator,Admin Rights,最近,我试图在没有系统询问的情况下授予我的应用程序管理员权限。是否要授予管理员权限?我找到了一种完美的方法 我找到的解决办法 我创建了一个名为nonadmin.bat的bat文件,并在其中编写了以下代码 cmd min C set __COMPAT_LAYER=RunAsInvoker && start %1 如果我们在它上面拖动任何exe,它会给它们管理员权限,在它不允许我在没有它的情况下访问环境变量之前,但在bat上拖动文件之后,它确实工作了 问题: 现在我的问题是:-

最近,我试图在没有系统询问的情况下授予我的应用程序管理员权限。是否要授予管理员权限?我找到了一种完美的方法

我找到的解决办法

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

cmd min C set __COMPAT_LAYER=RunAsInvoker && start  %1
如果我们在它上面拖动任何exe,它会给它们管理员权限,在它不允许我在没有它的情况下访问环境变量之前,但在bat上拖动文件之后,它确实工作了

问题:

现在我的问题是:-

“兼容层”实际上是什么意思?它有什么作用? 如何删除这样的东西,使其再次请求管理员权限? 这会降低系统安全性吗? __COMPAT_层,以及如何使用它 __COMPAT_LAYER是一个系统环境变量,允许您设置兼容性层,当您右键单击可执行文件、选择“属性”并转到“兼容性”选项卡时,可以调整这些设置

除了您所知道的一个之外,还有:

256Color-以256色运行 640x480-以640x480屏幕分辨率运行 DisableThemes-禁用视觉主题 Win95-在Windows 95的兼容模式下运行程序 Win98-在Windows 98/ME的兼容模式下运行程序 Win2000-在Windows 2000的兼容模式下运行程序 NT4SP5-在Windows NT 4.0 SP5的兼容模式下运行程序 您可以通过使用空格分隔多个选项:set u COMPAT_LAYER=Win98 640x480

取消设置uu COMPAT_LAYER变量 只要变量存在,这些设置就会持续。当设置变量的命令提示符关闭时,或者当使用命令set u COMPAT_LAYER=手动取消设置变量时,变量停止存在

因为您是通过批处理脚本设置变量的,所以一旦拖动到该变量上的可执行文件完成并且脚本关闭,该变量将自动取消设置。请务必注意,变量设置将保留到您选择的可执行文件生成的任何子进程

使用兼容层的安全性 如果您没有管理员权限,那么将uu COMPAT_LAYER设置为RunAsInvoker实际上不会给您管理员权限;它只是防止出现UAC弹出窗口,然后单击。因此,使用它是安全的,因为您并没有神奇地获得管理员权限


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

它会按说明执行。设置兼容性选项。您的示例仅适用于管理员。非管理员会出错。@你能详细说明并解释这三个问题的答案吗?大概应该是cmd/min/c…?谢谢你的详细解释,我的朋友,但我需要知道两件事。1我已经读到它是一个环境变量,但是每当我在环境变量中搜索它时,这里没有提到这样的东西。2正如您所说,要取消设置,我需要写入set u COMPAT_LAYER=或set u COMPAT_LAYER=NULL,但当我执行这些命令时,UAC提示符不会再次出现。我该怎么做才能让它们重现?我无法复制您的问题,但正如我在最后一句中所说的,您应该可以说set\u COMPAT\u LAYER=RunAsAdmin@Agent_Spock:有些环境变量默认存在,有些仅在设置时存在;这是后者之一。此外,如果双击有问题的可执行文件不再显示UAC提示符,这可能表明它不包含一个清单,告诉Windows它是否需要提升。当这种情况发生时,Windows会做出猜测。所以,也许Windows已经注意到您以非管理员身份成功地运行了它,并决定使用该套件。无论如何,除非您在注册表中或通过控制面板永久设置环境变量,否则这不是原因。如果它实际上是仅在设置时才存在的变量,则当设置它的命令提示符关闭且该提示符所拥有的所有应用程序时,它应该停止存在。除非他们出于某种原因使用setx。在我应用代码之前,我无法获取环境变量,因为它表明您需要管理员权限。然后我在nonadmin.bat上拖拽我的exe文件,然后我就可以得到环境变量的值。但是现在当i_uucompat_LAYER为空或null时,UAC提示将不会出现。我该怎么办?