win10神州 (win10神州网信政府版)

适用于: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

优点:可以根据是否需要决定是否尝试提升。