Wix打包的MSI安装包执行修改操作时如何要求管理员权限?
方案1:拦截无权限修改操作(实现成本最低,稳定性最高)
你当前配置的权限校验仅作用于InstallExecuteSequence,但修改操作会优先执行InstallUISequence逻辑,还未到执行序列阶段就会读写系统级的注册表、安装目录资源,进而引发损坏。只需将相同的权限校验规则同步添加到UI序列即可:
<InstallUISequence> <Custom Action='IsPrivileged' Before='AppSearch'>Not Privileged</Custom> </InstallUISequence>
配置完成后,无论从「程序和功能」触发修改、还是直接运行安装包进入维护模式,只要当前运行上下文没有管理员权限,会直接弹出你预设的错误提示并终止操作,完全避免损坏现有安装内容。
方案2:实现修改操作自动触发UAC提权
如果需要修改操作自动弹出UAC提升提示,需要补充以下配置:
- 显式声明全局属性,强制MSI始终运行在每机器安装上下文:
<Property Id="ALLUSERS" Value="1" Secure="yes" /> <Property Id="MSIINSTALLPERUSER" Value="0" Secure="yes" />
- 在Package节点中添加
ElevateInstallPrivileges="yes"属性,明确要求所有安装相关操作(包含修改、修复)都需要提升权限:
<Package Id="*" InstallerVersion="405" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated" ElevateInstallPrivileges="yes" Manufacturer="$(var.Publisher)" Description="$(var.ProductName) $(var.Version) Setup" />
以上配置完成后重新打包安装,触发修改操作时会自动弹出UAC提权提示,通过后才会执行后续逻辑。测试时请先卸载旧版本再安装新包,避免旧版本的ARP缓存影响验证结果。
内容的提问来源于stack exchange,提问作者Joseph Willcoxson
相关产品推荐
相关产品推荐

