Windows系统下应用静默卸载与安装脚本/CMD命令需求
作为经常跟自动化测试打交道的人,太懂你反复卸载重装版本的痛苦了——wmic product那命令确实省心,但就是留尾巴,控制面板删不掉还搞砸后续安装。下面给你几个靠谱的方案,从彻底静默卸载到干净重装都安排得明明白白:
一、彻底静默卸载的靠谱方法
1. 优先用MSI原生卸载(最干净)
如果你的产品是用MSI安装包部署的,直接用msiexec命令卸载是最稳妥的,能彻底清理注册表和系统残留:
msiexec /x {产品GUID} /qn /norestart
/x:指定卸载操作{产品GUID}:对应产品的唯一标识,怎么找?用这条命令查询:
或者去注册表wmic product where "name like '%你的产品名称%'" get IdentifyingNumber,NameHKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall(64位系统还要看Wow6432Node下的路径)找对应产品的子项,里面的ProductCode就是GUID。/qn:完全静默模式,无任何弹窗/norestart:卸载完成后不自动重启(如果不需要的话)
2. 调用软件自带的卸载程序
很多非MSI格式的软件会自带uninst.exe或者setup.exe,这些程序通常支持静默卸载参数,常见的参数有:
"C:\Program Files\你的产品目录\uninst.exe" /S
或者:
"C:\Program Files\你的产品目录\setup.exe" /uninstall /quiet
不同软件的参数可能略有差异,比如/VERYSILENT、/qn也是常用的,你可以先手动运行uninst.exe /?查看帮助文档。
3. 手动清理残留(解决wmic卸载后的遗留问题)
如果之前用wmic卸载后留下了控制面板条目或文件残留,手动清理这两步:
- 删除安装目录:
rd /s /q "C:\Program Files\你的产品名称" rd /s /q "C:\Program Files (x86)\你的产品名称" rd /s /q "%APPDATA%\你的产品名称" rd /s /q "%LOCALAPPDATA%\你的产品名称" - 删除注册表条目:
注意:修改注册表前最好备份,避免误删其他条目。reg delete "HKLM\Software\你的产品名称" /f reg delete "HKLM\Software\Wow6432Node\你的产品名称" /f reg delete "HKCU\Software\你的产品名称" /f
二、静默安装的通用命令
1. MSI安装包
msiexec /i "你的安装包路径\product.msi" /qn /norestart /log install.log
/i:指定安装操作/qn:完全静默/norestart:不自动重启/log:生成安装日志,方便排查问题
2. EXE安装包
大部分EXE安装包支持以下静默参数:
"你的安装包路径\product.exe" /S /VERYSILENT /NORESTART /LOG="install.log"
如果上面的参数不生效,试试/quiet或者/qn,部分软件可能有自定义参数,同样可以运行product.exe /?查看帮助。
三、完整自动化脚本示例
把卸载、清理、安装整合到一个批处理脚本里,适合自动化测试反复执行:
@echo off setlocal enabledelayedexpansion :: 配置你的产品信息 set "APP_NAME=你的产品名称" set "INSTALLER_PATH=C:\路径\到\你的安装包.exe" :: ====================== 第一步:静默卸载 ====================== echo 正在查找%APP_NAME%的卸载方式... set "PRODUCT_GUID=" for /f "skip=1 tokens=*" %%a in ('wmic product where "name like '%%%APP_NAME%%%'" get IdentifyingNumber') do ( set "PRODUCT_GUID=%%a" :: 去掉GUID后面的空格 set "PRODUCT_GUID=!PRODUCT_GUID: =!" goto :uninstall_with_guid ) :: 找不到GUID,尝试找自带卸载程序 set "UNINSTALLER_PATH=" for /f "tokens=*" %%b in ('dir /s /b "C:\Program Files\*uninst*.exe" ^| findstr /i %APP_NAME%') do ( set "UNINSTALLER_PATH=%%b" goto :uninstall_with_exe ) for /f "tokens=*" %%b in ('dir /s /b "C:\Program Files (x86)\*uninst*.exe" ^| findstr /i %APP_NAME%') do ( set "UNINSTALLER_PATH=%%b" goto :uninstall_with_exe ) echo 未找到%APP_NAME%的卸载方法,请检查产品名称是否正确 exit /b 1 :uninstall_with_guid echo 正在用MSI GUID卸载%APP_NAME%... msiexec /x !PRODUCT_GUID! /qn /norestart if errorlevel 1 ( echo 卸载失败,错误代码:%errorlevel% exit /b 1 ) goto :cleanup :uninstall_with_exe echo 正在用自带卸载程序卸载%APP_NAME%... "%UNINSTALLER_PATH%" /S /VERYSILENT /NORESTART if errorlevel 1 ( echo 卸载失败,错误代码:%errorlevel% exit /b 1 ) :: ====================== 第二步:清理残留 ====================== :cleanup echo 正在清理%APP_NAME%的残留文件... rd /s /q "C:\Program Files\%APP_NAME%" 2>nul rd /s /q "C:\Program Files (x86)\%APP_NAME%" 2>nul rd /s /q "%APPDATA%\%APP_NAME%" 2>nul rd /s /q "%LOCALAPPDATA%\%APP_NAME%" 2>nul echo 正在清理%APP_NAME%的注册表条目... reg delete "HKLM\Software\%APP_NAME%" /f 2>nul reg delete "HKLM\Software\Wow6432Node\%APP_NAME%" /f 2>nul reg delete "HKCU\Software\%APP_NAME%" /f 2>nul :: ====================== 第三步:静默安装 ====================== echo 正在静默安装%APP_NAME%... "%INSTALLER_PATH%" /S /VERYSILENT /NORESTART /LOG="install.log" if errorlevel 1 ( echo 安装失败,错误代码:%errorlevel% exit /b 1 ) else ( echo %APP_NAME%卸载-清理-安装流程完成! ) endlocal
四、关键注意事项
- 脚本需要以管理员权限运行,否则可能无法修改注册表或删除系统目录下的文件。
- 不同软件的静默参数可能不同,建议先手动测试参数是否有效,再整合到脚本里。
- 生成安装/卸载日志很重要,出现问题时可以通过日志快速定位原因。
内容的提问来源于stack exchange,提问作者Noman Ajmal




