今天在Windows 7下安装软件新版本时,不小心误点了卸载旧版本安装进程界面的“取消”按钮。导致再次运行安装程序的时候卡在了一个蛋疼的“此操作只对目前安装的产品有效”安装提示界面。

想到可能是刚才卸载进程中断,导致旧版本没卸载干净。于是搜索注册表删除了大多数和SU相关的注册表信息,结果情况依然。

各种卸载软件测试一遍,均没有发现有旧版本的影子。

用谷歌搜索偶然发现这个帖子,收到启发,然后查看了msiexec这个命令的相关参数如下:

 msiexec /Option <Required Parameter> [Optional Parameter]

安装选项

 </package | /i> <Product.msi>  安装或配置产品  
 /a <Product.msi>  管理安装 - 在网络上安装产品  
 /j<u|m> <Product.msi> \[/t <Transform List>\] \[/g <Language ID>\]  公布产品 - m 公布到所有用户,u 公布到当前用户  
 </uninstall | /x> <Product.msi | ProductCode>  卸载产品  

显示选项

 /quiet  安静模式,无用户交互  
 /passive  无人参与模式 - 只显示进度栏  
 /q[n|b|r|f]  设置用户界面级别  
 n - 无用户界面  
 b - 基本界面  
 r - 精简界面  
 f - 完整界面(默认值)  
 /help  帮助信息  

重新启动选项

 /norestart  安装完成后不重新启动  
 /promptrestart  必要时提示用户重新启动  
 /forcerestart  安装后始终重新启动计算机  

日志选项

 /l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*] <LogFile>  
 i - 状态消息  
 w - 非致命警告  
 e - 所有错误消息  
 a - 操作的启动  
 r - 操作特定记录  
 u - 用户请求  
 c - 初始用户界面参数  
 m - 内存不足或致命退出信息  
 o - 磁盘空间不足消息  
 p - 终端属性  
 v - 详细输出  
 x - 额外调试信息  
 + - 扩展到现有日志文件  
 ! - 每一行刷新到日志  
 * - 记录所有信息,除了 v 和 x 选项  
 /log <LogFile>  
 与 /l* <LogFile> 相同  

更新选项

 /update <Update1.msp>[;Update2.msp]  应用更新  
 /uninstall <PatchCodeGuid>[;Update2.msp] /package <Product.msi | ProductCode>  删除产品的更新
  

修复选项

 /f[p|e|c|m|s|o|d|a|u|v] <Product.msi | ProductCode>  修复产品  
 p - 仅当文件丢失时  
 o - 如果文件丢失或安装了更旧的版本(默认值)  
 e - 如果文件丢失或安装了相同或更旧的版本  
 d - 如果文件丢失或安装了不同版本  
 c - 如果文件丢失或较验和与计算的值不匹配  
 a - 强制重新安装所有文件  
 u - 所有必要的用户特定注册表项(默认值)  
 m - 所有必要的计算机特定注册表项(默认值)  
 s - 所有现有的快捷键方式(默认值)  
 v - 从源运行并重新缓存本地安装包  

设置公共属性

 [PROPERTY=PropertyValue]

于是尝试开始菜单/运行/输入cmd,输入命令msiexec /o  e:/a.msi,终于搞定。

如果安装包是.exe后缀的,可以尝试用WinRAR软件解压缩到独立文件夹,应该就能找到一个.msi的文件,然后参照命令(msiexec /o  e:/a.msi)替换相应选项参数和文件路径即可。