适用于:Windows 10 神州网信政府版,Windows 10
对于将在企业环境中运行的软件,了解触发或抑制UAC提示的多种方式以及这些方式的优先级是很重要的。如果在多个地方配置了相同的设置,则按优先顺序排列。这些优先级被称为“可加的”,如果当前执行级别较低,它将导致“升级”,但不会“降级”已经指定的执行级别。
基本的UAC设置选项包括:
highestAvailable:最高权限等级执行应用程序。requireAdministor:会导致提升提示,即如果未批准 UAC,应用程序将不会运行。asInvoker:阻止 UAC 提示并使用用户当前的权限运行目标 EXE(管理员不提升)。接下来介绍各种触发或抑制UAC提示的方式,及这些方式的优先级:
基于表现:
外部清单:优先级:1(最低)
范围:作用于单独exe,存储在特定文件夹中
配置:在exe目录创建一个清单文件。如:对于abc.exe,创建abc.exe.manifest。
配置/篡改:与文件权限相关,UAC虚拟化可能覆盖。
exe的.manifest 文件中若不包含 <trustinfo> 部分,则该exe文件的虚拟化将不会被禁用。在该应用因权限原因导致重定向到另一位置的场景下,即exe虚拟化。清单文件将存储在C:\Users\XXX\Appdata\local\VirtualStore\Program Files中。
可用的UAC选项:asInvoker,highestAvailable,requireAdministrator。
优点:易于配置-无需更改exe。
COMPATIBILITY 部分 - 此部分允许您指定 应用程序已设计为与某些版本 的操作系统兼容。指定这些设置还会禁用 程序兼容性助手 (PCA)(操作系统自动匀场)。 重新设计应用程序安装或 对其进行填充以使其与 Windows 7 兼容的管理员可以使用清单来 防止操作系统通过 UAC 虚拟化或运行 PCA。 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!--下面的ID表示应用程序支持Windows Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!--下面的ID表示应用程序支持Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> </application> </compatibility> <!-- TRUSTINFO 部分指定请求的 权限和UIPI 禁用(特殊应用程序) <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> |
优先级:2(覆盖外部清单)
范围:作用于单独exe
配置:在exe中嵌入清单资源
可用的UAC选项:asInvoker,highestAvailable,requireAdministrator。
优点:不能脱离exe,不能轻易解构。
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <!-- UAC 清单选项 如果要更改 Windows 用户帐户控制级别,请用以下节点之一替换 requestedExecutionLevel 节点。 <requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 指定 requestedExecutionLevel 节点将会禁用文件和注册表虚拟化。 如果要利用文件和注册表虚拟化实现向后 兼容性,则删除 requestedExecutionLevel 节点。 --> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> |
基于垫片引擎:(基于Shim的UAC提示会覆盖基于清单的内容。因为Shims应用于运行时环境,而不是开发软件时)
基于注册表的UAC垫片:优先级:3
范围:作用于单独exe,供特定用户使用
配置:通过程序兼容性助手(PcaSvc),兼容性疑难解答,兼容性选项卡,注册表调整
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlagsHKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlagsHKCU\Software\Microsoft\WindowsNT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted可用的 UAC 选项:[兼容模式]:RunAsInvoker(asInvoker)、RunAsHighest(highestAvailable)、RunAsAdmin(requireAdministrator)、ElevateCreateProcess
优点:易于配置(与 .SDB 相比)
环境变量:优先级:4(覆盖基于注册表的UAC Shims)
范围:脚本作用范围
配置:将环境变量__COMPAT_LAYER设置为兼容模式/层名称。如"set__COMPAT_LAYER=RunAsAdmin"
可用的 UAC 选项:[兼容模式] RunAsInvoker (asInvoker)、RunAsHighest (highestAvailable)、RunAsAdmin (requireAdministrator)、ElevateCreateProcess
优点:可以通过脚本触发,能够选择兼容层。另一种脚本方法是使用“Runas”,它只允许相当于“requireAdministrator”
基于.sdb的UAC垫片:优先级:5(覆盖基于注册表和环境变量的UAC垫片)
范围:作用于所有用户(机器全局),作用于已安装.sdb的单独exe。
可用的 UAC 选项:RunAsInvoker (asInvoker)、RunAsHighest (highestAvailable)、RunAsAdmin (requireAdministrator)、RelaunchElevated、ElevateCreateProcess、AdditiveRunAsHighest
配置:使用 Compatibility Administrator 构建 .sdb,分发或安装。
优点:防止篡改。
具体操作:使用Windows ADK中的Compatibility Administrator构建.sdb。步骤如下:
打开Compatibility Administrator(32-bit),新建Database,并创建Application Fix。2,在创建向导中,输入兼容性修复的应用信息,及问题应用的exe可执行文件。
3,选择合适的兼容性模式,选择“下一步”。
4,添加匹配该可执行文件的文件属性,点击“完成”。
5,点击保存,导出.sdb文件。
6,将该.sdb文件拷贝至问题电脑的c:\windows\apppatch文件夹中(注意:如果该文件在网络路径下,不要直接拷贝,apppatch文件夹不具备从网络路径拷贝的权限,可先拷贝至本地其他路径,再复制至apppatch文件夹中)。
7,以管理员身份打开cmd命令行,运行如下命令,安装sdb文件。
8,使用标准用户可以直接以administrator权限正常打开问题应用。
基于进程启动:(只针对特定的exe运行,highestAvailable 和 asInvoker 不可用。)
快捷方式属性(高级按钮,而不是“兼容性”选项卡):优先电脑级:6
作用域:单个快捷方式(其他快捷方式可以不用提升)
配置:“高级”按钮下的复选框(不是“兼容性选项卡”)
可用的 UAC 选项:相当于 requireAdministrator
优点:可由最终用户轻松自行配置。
挑战:只能requireAdministrator,没有highestAvailable的等价物。
Shell 菜单动词(资源管理器中的右键单击菜单):优先级:6
范围:作用于特定类型的所有文件。通过将 Shell Menu 设置为“default”,它可以影响文件类型的所有双击。
自定义动词的配置(如:在提升权限的记事本中编辑):
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\txtfile\shell\runas] @="Notepad (Elevated)" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\txtfile\shell\runas\command] @=hex(2):22,25,53,79,73,74,65,6d,52,6f,6f,74,25,5c,53,79,73,74,65,6d,33,32,5c,\ 6e,6f,74,65,70 ,61,64,2e,65,78,65,22,20,22,25,31,22,20,25,2a,00 |
重新配置标准动词(如:更改文本文件的默认“打开”以使用提升权限的记事本进行编辑):
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\txtfile\shell] @="runas" [-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\txtfile\shell\open] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\txtfile\shell\runas] @="Open" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\txtfile\shell\runas\command] @=hex(2):22,25,53,79,73,74,65,6d,52,6f,6f,74,25,5c,53,79,73,74,65,6d,33,32,5c,\ 6e,6f,74,65,70,61,64,2e,65,78,65,22,20,22,25,31,22,20,25,2a,00 |
可用的 UAC 选项:相当于 requireAdministrator
优点:用户在每次使用过程中都可以选择是否提升。
挑战:用户必须记得右键单击并选择一个提升的选项,只能要求管理员,没有最高可用的等价物。
脚本编写:优先级:7
范围:作用于单独exe
配置(以记事本为例):
VBScript (.VBS): set objShell = CreateObject("Shell.Application") objShell.ShellExecute "notepad.exe", "", "", "runas", 1 |
可用的 UAC 选项:相当于 requireAdministrator
优点:可以根据是否需要决定是否尝试提升。