Windows下静默卸载与静默安装
作者:高玉涵
时间:2020.12.27 15:09
博客:blog.csdn.net/cg_i
作者背景环境参见:
《通过Windows批处理脚本批量修改DNS》
临河而羡鱼,不如归家织网。——《淮南子·说林训》
困难虽然很多,但不要想太多,解决好一个,再考虑下一个便是。——《火星救援》
写在前面的
系统管理从来都不是一个清闲的工作。对于那些主动选择这份工作的人或被老板调入这个职位的人来说都是如此。常常有这样的情况,老板不批准录用新人,于是这些没有经过培训的老员工就被赋予了管理系统的职责。系统管理是一门艺术,而不是墨守成规,系统管理几乎没有什么可以循规蹈矩的,在需求多变的环境下更是如此。我只想在这条路上走得更加轻省,甚至可以陶冶自己的情操。
引子
年未岁尾,公司各项业务到了紧要关头,为充分保障年终决算工作安全、高效运行,确保2020年各业务圆满收官。近段时间一直加班加点,在对全辖网点进行信息安全检查和设备巡检,历时半个月终完成了此项工作。本想稍稍喘口气,汇总检查结果并谋划下一步工作计划。不曾想,又接到其它部门对全辖业务终端驱动升级的请求,我是22号下午接到的电话,按要求需当日完成所有设备升级工作,好家伙~我尽量用平和一点的口吻跟你讲讲道理。
前言
这个任务要求,为确保升级后的系统稳定,需先将旧版本的驱动卸载,然后再安装新版本的驱动。了解我的朋友都知道,要想在规定时间内完成全辖终端升级,这基本上是不可能完成的任务(参见先前文章了解我所处的环境)。通过自动化静默卸载与静默安装驱动,自然而然成为了我唯一的选择。
所谓静默卸载与安装,是使程序卸载与安装运行而不向计算机用户显示进程的进度或指示,是在用户不知道正在发生的情况下运行,通常与无人参与相关联。要想实现“静默”首先软件必须支持这一功能,经过对升级包研究后发现,包内同时封装了3 个软件,进一步展开后分析,其中有2个是用NSIS,另1个用EasySetup封装的安装包。遗憾的EasySetup封装的包不支持静默卸载,也就是说在这个软件卸载时,需要人工干预(图1-1)。
曾想过写个VBS脚本模拟点击“卸载”按钮,达到无人干预卸载软件的目地,思来想去还是不能保证100%稳定,就作罢了。下面给出核心代码。
Keyallupdate.bat
@ECHO OFF
REM *****************************************************
REM * Author: 高玉涵
REM * File: keyallupdate.bat
REM * Date: 20201223
REM * Ver: v1.0
REM * LastModify:
REM *
REM * Declare: 升腾终端UKEY国密驱动升级
REM * 1.卸载旧版本UKEY驱动
REM * 2.安装UKEY驱动
REM * 4.终端重启
REM *****************************************************
set NXY_49_61_03="%ProgramFiles(x86)%\NXY_49_61_03\uninst.exe"
set NXY_49_67_03="%ProgramFiles(x86)%\NXY_49_67_03\Uninstall.exe"
set GECSP20317="%ProgramFiles(x86)%\GECSP20317\uninst.exe"
:uninstall
echo 旧版本驱动卸载开始...
if exist %NXY_49_61_03% (
start /wait "" %NXY_49_61_03% /S
:loop1
tasklist|findstr /ic:"Au_.exe">NUL
if %errorlevel% equ 0 goto loop1
ping -n 3 127.1>NUL
if not exist %NXY_49_61_03% (echo "握奇UKEY卸载完成.") else (echo "握奇UKEY卸载失败!")
)
if exist %GECSP20317% (
start /wait "" %GECSP20317% /S
:loop2
tasklist|findstr /ic:"Au_.exe">NUL
if %errorlevel% equ 0 goto loop2
ping -n 3 127.1>NUL
if not exist %GECSP20317% (echo "海泰UKEY卸载完成.") else (echo "海泰UKEY卸载失败!")
)
if exist %NXY_49_67_03% (
start /wait "" %NXY_49_67_03% /S
:loop3
tasklist|findstr /ic:"Uninstallation_">NUL
if %errorlevel% equ 0 goto loop3
ping -n 3 127.1>NUL
if not exist %NXY_49_67_03% (echo "文鼎创UKEY卸载完成.") else (echo "文鼎创UKEY卸载失败!")
)
:install
echo 国密驱动更新开始...
start /wait "" key.exe /S
if %errorlevel% equ 0 (echo "国密UKEY驱动更新完成.") else (echo "国密UKEY驱动更新失败!"&goto err)
:wr
start /wait ewfmgr c: -commit
shutdown -r -t 5 -c "UKEY更新成功,系统重启中...!"
goto end
:err
color 4
echo "UKEY更新失败,请及时联系信息科技部!"
goto end
:end
pause
结束语
工作中我是极乐意分享,日常任务往往急切,上述代码难免疏漏及缺点,我真诚地希望同行和读者不吝赐教,不胜感激之至。