Windows 10中x86版.exe双击无UAC弹窗,提示需权限提升问题
x86程序双击无法触发UAC弹窗,仅显示权限提示的问题排查
问题现象
- 我有x86和x64两个版本的.exe程序,二者的清单都配置了强制管理员身份运行:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel> </requestedPrivileges> </security> </trustInfo>
- 在Windows 10 x64 Pro系统中,把x86版本放在
C:\Program Files (x86)文件夹下,双击运行时只弹出“请求的操作需要提升权限”的提示,不会出现UAC确认窗口;但右键选择“以管理员身份运行”时,能正常弹出UAC提示框。 - x64版本双击可正常触发UAC弹窗,而且之前这个x86版本也能正常唤起UAC,现在突然异常。
排查线索更新
- 怀疑问题和清单中把
processorArchitecture="X86"改成processorArchitecture="*"有关,事件查看器里记录了组件冲突错误:
应用程序所需的组件版本与已激活的另一个组件版本冲突。冲突的组件为:
组件1: C:\WINDOWS\WinSxS\manifests\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.4355_none_a865f0c28672571c.manifest.
组件2: C:\WINDOWS\WinSxS\manifests\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.4355_none_60b8b9eb71f62e16.manifest.
- 用Resource Hacker查看x86程序的资源,发现里面有两个重复的通用控件依赖清单条目:
<dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency>
原因分析及解决办法
- 原因:x86程序同时声明了通配符
*和具体x86架构的通用控件依赖,导致Windows加载程序时出现组件架构冲突,进而干扰了UAC权限提升的正常触发流程。系统解析依赖失败后,无法正常唤起UAC弹窗,只能返回权限不足的提示。 - 解决步骤:
- 用Resource Hacker打开x86版本的.exe文件,找到清单资源(一般是RT_MANIFEST类型,ID为1)。
- 删除其中
processorArchitecture="*"的那个通用控件依赖条目,只保留processorArchitecture="x86"的版本。 - 保存修改后的程序,重新双击测试,应该能正常弹出UAC提示框。
- 如果修改后还是有问题,建议重新编译程序时,确保清单里只指定对应架构的依赖,不要同时混用通配符和具体架构值。
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

