目录
1. 打包脚本基础
参见链接:NSIS 打包脚本基础
2. 定制页面
参见链接:定制页面
3. NSIS MUI 的内置向导页面
参见链接:NSIS MUI 的内置向导页面
4. 使用总结
4.1 版本比较
Function VersionCompare
!define VersionCompare `!insertmacro VersionCompareCall`
!macro VersionCompareCall _VER1 _VER2 _RESULT
Push `${
_VER1}`
Push `${
_VER2}`
Call VersionCompare
Pop ${_RESULT}
!macroend
Exch $1
Exch
Exch $0
Exch
Push $2
Push $3
Push $4
Push $5
Push $6
Push $7
begin:
StrCpy $2 -1
IntOp $2 $2 + 1
StrCpy $3 $0 1 $2
StrCmp $3 '' +2
StrCmp $3 '.' 0 -3
StrCpy $4 $0 $2
IntOp $2 $2 + 1
StrCpy $0 $0 '' $2
StrCpy $2 -1
IntOp $2 $2 + 1
StrCpy $3 $1 1 $2
StrCmp $3 '' +2
StrCmp $3 '.' 0 -3
StrCpy $5 $1 $2
IntOp $2 $2 + 1
StrCpy $1 $1 '' $2
StrCmp $4$5 '' equal
StrCpy $6 -1
IntOp $6 $6 + 1
StrCpy $3 $4 1 $6
StrCmp $3 '0' -2
StrCmp $3 '' 0 +2
StrCpy $4 0
StrCpy $7 -1
IntOp $7 $7 + 1
StrCpy $3 $5 1 $7
StrCmp $3 '0' -2
StrCmp $3 '' 0 +2
StrCpy $5 0
StrCmp $4 0 0 +2
StrCmp $5 0 begin newer2
StrCmp $5 0 newer1
IntCmp $6 $7 0 newer1 newer2
StrCpy $4 '1$4'
StrCpy $5 '1$5'
IntCmp $4 $5 begin newer2 newer1
equal:
StrCpy $0 0
goto end
newer1:
StrCpy $0 1
goto end
newer2:
StrCpy $0 2
end:
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
FunctionEnd
4.2 MessageBox MB_YESNO
MessageBox MB_YESNO "旧版本$1已安装,是否迁移旧版本数据库?" IDYES true IDNO false
true:
DetailPrint "it's true!"
StrCpy $IsUpdateDB "true"
Goto next
false:
DetailPrint "it's false"
StrCpy $IsUpdateDB "false"
Goto next
next:
${IF} $IsUpdateDB == "true"
ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" ""
Rename "$0\db\TyOS_Server.db" "$0\db\TyOS_Server_old.db"
${EndIf}
=MessageBox MB_YESNO 中的true和false分支必须有Goto,否则即使选择了IDYES ,true和false分支也都会执行,导致结果不正确=
4.3 定义全局变量
var /GLOBAL IsUpdateDB
var /GLOBAL ProductVersion
4.4 添加exe图标
CreateShortCut "$DESKTOP\${EXE_NAME}.lnk" "$INSTDIR\${EXE_NAME}" ""$INSTDIR\ICON\icon.ico""
CreateShortCut 快捷方式 对应的执行文件 icon
=注意icon目录外必须多一层"",好像由于参数是数组的缘故=
5. 如何在NSIS中安装后创建桌面和开始菜单的快捷方式
;开始菜单
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${EXE_NAME}.lnk" "$INSTDIR\${EXE_NAME}" ""$INSTDIR\ICON\icon.ico""
;桌面快捷方式
CreateShortCut "$DESKTOP\${EXE_NAME}.lnk" "$INSTDIR\${EXE_NAME}" ""$INSTDIR\ICON\icon.ico""