使用MSI卸载自动化命令行能否同时删除新旧两个产品代码?
MSI同时卸载新旧版本产品的正确命令写法
首先要明确:msiexec的/x(卸载)参数一次仅支持指定一个卸载目标(可以是产品GUID、也可以是原始MSI安装包路径),不能在单次msiexec调用中同时传入两个卸载目标,你尝试的合并写法不生效。
正确实现方案(适配软件中心静默执行要求)
方案1:分两次调用msiexec执行卸载
如果你的需求是同时卸载旧版本、以及已安装的新版本,直接按顺序执行两条卸载命令即可,/qb参数已经满足静默基本要求,要完全无交互可替换为/qn:
:: 卸载旧版本 msiexec /x {旧版本产品GUID} /qb /norestart :: 卸载已安装的新版本(两种写法二选一即可) msiexec /x {新版本产品GUID} /qb /norestart :: 或用新版本MSI包卸载 msiexec /x "newfilename.msi" /qb /norestart
如果是要在安装新版本前先卸载旧版本,再执行新版本安装,命令顺序如下:
msiexec /x {旧版本产品GUID} /qb /norestart msiexec /i "newfilename.msi" /qb /norestart ALLUSERS=1
方案2:MSI内置Major Upgrade自动卸载旧版本(更规范的安装包制作方案)
如果是做安装包的正规流程,更推荐直接在MSI项目中配置*Major Upgrade(主版本升级)*规则,指定当检测到旧版本产品GUID时自动卸载,不需要额外写卸载命令,打包后直接安装新MSI就会自动处理旧版本卸载,适配软件中心的部署逻辑。
注意事项
- 软件中心执行命令时默认使用系统权限,确保产品GUID没有写错、MSI路径是绝对路径或者系统上下文能访问的路径
- 加上
/norestart参数可以避免卸载过程中自动触发系统重启,符合企业部署的常规要求 - 如果要完全隐藏卸载弹窗,把
/qb换成/qn即可
内容的提问来源于stack exchange,提问作者ChangkyPopz
相关产品推荐
相关产品推荐

