NSIS打包生成Exe

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""

猜你喜欢

转载自blog.csdn.net/wyw0000/article/details/130051575