NSIS脚本学习:如何检测并卸载已有软件版本
前言
目前开发的程序以基于.net的应用程序为主,程序开发好后,需要进行安装包的生成,及setup文件的生成。 常见的是NSIS工具,之前一直用的单文件打包工具,不适合将运行环境加进去,因此开始使用更高版本的NSIS 3.06。 这里要解决的是安装包生成后,原有电脑已有旧版本的软件,这里需要检测判断是否需要卸载旧版本的软件,便于更新。
检测并自定义卸载
在NSIS脚本的最后面,附加以下代码即可解决该问题
Var UNINSTALL_PROG Var OLD_VER Var OLD_PATH Function .onInit ClearErrors ReadRegStr $UNINSTALL_PROG ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} "UninstallString" IfErrors done ReadRegStr $OLD_VER ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} "DisplayVersion" MessageBox MB_YESNOCANCEL|MB_ICONQUESTION "检测到本机已经安装了 ${PRODUCT_NAME} $OLD_VER。 $ $ 是否先卸载已安装的版本?" /SD IDYES IDYES uninstall IDNO done Abort uninstall: StrCpy $OLD_PATH $UNINSTALL_PROG -10 ExecWait "$UNINSTALL_PROG" /S _?=$OLD_PATH $0 DetailPrint "uninst.exe returned $0" Delete "$UNINSTALL_PROG" RMDir $OLD_PATH done: FunctionEnd