NSIS运行的一些检查项目
程序员文章站
2024-03-09 10:00:11
...
说明
安装软件或者升级软件的时候要做一下常规的检查,一般包括以下几项:
- 软件是否已经安装
- 软件版本是否正确(升级)
- 软件是否正在运行
- 安装/升级程序是否正常运行
Script
配置
!define PRODUCT_NAME "Test"
!define PRODUCT_VERSION "2.4.1"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_UNINST_ROOT_PATH "SOFTWARE\WOW6432Node\My Project\Test"
!define PRODUCT_UNINST_HOME_PATH "SOFTWARE\WOW6432Node\My Project\Test\2.3.1\Home"
!define PRODUCT_INSTALL "TEST_INSTALL"
;语言设置
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "SimpChinese"
LangString VERSION_IS_WRONG ${LANG_SIMPCHINESE} "当前软件版本不是2.4版本,不支持此次升级!"
LangString VERSION_IS_WRONG ${LANG_ENGLISH} "The current software version is not version 2.4 and this upgrade is not supported!"
LangString VERSION_IS_LESS ${LANG_SIMPCHINESE} "当前软件版本为"
LangString VERSION_IS_LESS ${LANG_ENGLISH} "The current software version is "
LangString NEED_UPGRADE ${LANG_SIMPCHINESE} " , 即将升级至${PRODUCT_VERSION}版本。"
LangString NEED_UPGRADE ${LANG_ENGLISH} ", Upgrading to ${PRODUCT_VERSION}."
LangString SOFTWARE_NOT_EXIST ${LANG_SIMPCHINESE} "软件没有安装,请先安装软件。"
LangString SOFTWARE_NOT_EXIST ${LANG_ENGLISH} "The software is not installed, please install the software first."
LangString SOFTWARE_RUN ${LANG_SIMPCHINESE} "软件正在运行,请先关闭软件。"
LangString SOFTWARE_RUN ${LANG_ENGLISH} "The software is running, please close the software first."
LangString UPGRADE_RUN ${LANG_SIMPCHINESE} "升级程序已经在运行。"
LangString UPGRADE_RUN ${LANG_ENGLISH} "The upgrade program is already running."
软件是否安装
可以通过软件在注册表中的安装路径或者其他信息来判断软件是否安装,这里使用的是版本号
Function verify_install
ReadRegStr $R2 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_ROOT_PATH}" "CurrentVersion"
;也可以使用安装路径来判断
;ReadRegStr $R2 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_HOME_PATH}" "7500_HOME_PATH"
StrLen $0 $R2
${if} $0 < 1
MessageBox MB_ICONSTOP $(SOFTWARE_NOT_EXIST) IDOK
Abort
${endif}
FunctionEnd
软件版本判断
Function verify_version
; Verify the version
ReadRegStr $R2 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_ROOT_PATH}" "CurrentVersion"
!insertmacro VersionCompare
;我的这个脚本是升级的,要求必须是2.4
;${VersionCompare} "$R2" "${PRODUCT_VERSION}" $1 与当前准备安装的版本比较
${VersionCompare} "$R2" "2.4" $1
;比较结果为0/1/2,0表示相等,1表示大于,2表示小于
StrCmp $1 "1" 0 +3
MessageBox MB_ICONSTOP $(VERSION_IS_WRONG) IDOK
Abort
StrCmp $1 "2" 0 +3
MessageBox MB_ICONSTOP $(VERSION_IS_WRONG) IDOK
Abort
FunctionEnd
软件运行判断
需要添加脚本FindProcDLL.dll到\NSIS\Plugins\x86-ansi中
Function verify_running
FindProcDLL::FindProc "Test.exe"
pop $R0
StrCmp $R0 0 +3
MessageBox MB_ICONSTOP $(SOFTWARE_RUN) IDOK
Abort
FunctionEnd
安装/升级程序运行判断
Function verify_upgarde
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${PRODUCT_INSTALL}") i .r1 ?e'
Pop $R0
StrCmp $R0 0 +3
MessageBox MB_ICONSTOP $(UPGRADE_RUN) IDOK
Abort
FunctionEnd
如果全部检查通过,就可以进行下一步了,我增加了一个提示:
Function .onInit
call verify_install
call verify_version
call verify_running
call verify_upgarde
MessageBox MB_OK "$(VERSION_IS_LESS) $R2 $(NEED_UPGRADE)" IDOK
FunctionEnd
安装完成以后,还需要做一写修改注册表的操作:
Function .onInstSuccess
; Change the version to 2.4.1
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_ROOT_PATH}" "CurrentVersion" "${PRODUCT_VERSION}"
MessageBox MB_OK "$(UPGRADE_END)" IDOK
FunctionEnd
上一篇: 用java复制指定文件夹
推荐阅读
-
NSIS运行的一些检查项目
-
使用IDEA工具配置和运行vue项目及遇到的坑
-
详解IDEA多module项目maven依赖的一些说明
-
Spring boot项目打包成jar运行的二种方法
-
Eclipse运行android项目报错Unable to build: the file dx.jar was not loaded from the SDK folder的解决办法
-
Eclipse运行android项目报错Unable to build: the file dx.jar was not loaded from the SDK folder的解决办法
-
Spring项目导出可运行的JAR 博客分类: SpringMaven Spring3maven可运行jar导出异常
-
Spring boot项目打包成jar运行的二种方法
-
学Java做项目需要学习的一些技能
-
J2EE学习中一些值得研究的开源项目 项目管理JBoss应用服务器Derby企业应用