WIX安装程序两次触发UAC:如何实现仅一次权限请求?
解决WIX安装程序两次触发UAC的问题
你的问题根源在于RegShell.exe的清单文件强制要求管理员权限,而你的WIX安装包本身已经以管理员权限运行(Package配置了InstallScope="perMachine"和InstallPrivileges="elevated"),此时调用带requireAdministrator清单的外部程序会触发第二次UAC验证。要实现仅一次UAC弹窗,按以下步骤处理:
核心解决方案
修改RegShell.exe的清单文件,将requestedExecutionLevel节点改为level="asInvoker",或者直接移除这个节点:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
原因:你的自定义动作已经配置了Impersonate="no"且为Execute="deferred",此时自定义动作会继承WIX安装程序的管理员权限,RegShell.exe以调用者权限运行即可完成Shell扩展注册,无需自身再请求管理员权限。
额外检查点
- 修正自定义动作ID匹配错误:你的
<Custom>元素里写的动作ID是RegisterShellExtensionx,但对应的<CustomAction>ID是RegisterShellExtension,笔误会导致自定义动作无法执行,需修正为一致:<Custom Action="RegisterShellExtension" After="InstallFinalize">(NOT VersionNT64) AND (NOT Installed)</Custom> - 可选调整执行时机:Shell扩展注册建议放在
InstallFiles之后、InstallFinalize之前,确保目标DLL已被正确安装到目录后再执行注册操作。
内容的提问来源于stack exchange,提问作者Action Heinz
相关产品推荐
相关产品推荐

