1. 程式人生 > >NSIS安裝包腳本

NSIS安裝包腳本

lld 安裝完成 page nic dial publisher urn pos tran

!addincludedir "include" Var MSG ;MSG變量必須定義,而且在最前面,否則WndProc::onCallback不工作,插件中需要這個消息變量,用於記錄消息信息 Var Dialog ;Dialog變量也需要定義,他可能是NSIS默認的對話框變量用於保存窗體中控件的信息 Var BGImage ;背景大圖 Var ImageHandle Var BGImage1 ;背景大圖 Var ImageHandle1 ;Var BGImage2 ;背景大圖 ;Var ImageHandle2 ;Var STATE ;Var WarningForm Var Txt_Browser Var btn_Browser Var btn_in Var btn_ins Var btn_back Var btn_Close Var btn_instetup Var btn_instend Var btn_instend1 Var btn_Licenseback Var btn_Gracenoteback Var Txt_Xllicense Var Rtf_license Var Txt_Gracenote Var Rtf_Gracenote Var Txt_ji Var Ckbox0 Var Ckbox1 Var Ckbox1_State Var Ckbox2 Var Ckbox2_State Var Ckbox3 Var Ckbox3_State Var ckbox4 Var ckbox5 ;---------------------------全局編譯腳本預定義的常量----------------------------------------------------- !include x64.nsh !include WinVer.nsh !define PRODUCT_NAME "Scale3DC汽車衡稱重管理系統" !define PRODUCT_VERSION "2018.0.0.0" !define PRODUCT_PUBLISHER "Tencent" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" ;---------------------------設置軟件壓縮類型(也可以通過外面編譯腳本控制)------------------------------------ SetCompressor lzma SetCompress force ;應用程序顯示名字 Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" ;應用程序輸出文件名 OutFile "${PRODUCT_NAME}.exe" ;安裝路徑 !define DIR "$PROGRAMFILES\Scale3DC" ;請在這裏定義路徑 InstallDir "${DIR}" InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" ;請求提升管理員權限 RequestExecutionLevel admin ShowInstDetails nevershow ;設置是否顯示安裝詳細信息。 ShowUnInstDetails nevershow ;設置是否顯示刪除詳細信息。 ; MUI 預定義常量 ;!define MUI_ABORTWARNING ;退出提示 ;!define MUI_CUSTOMFUNCTION_ABORT ABORT ;MUI_CUSTOMFUNCTION_ABORT ;安裝圖標的路徑名字 !define MUI_ICON "Icon\install.ico" ;卸載圖標的路徑名字 !define MUI_UNICON "Icon\win-uninstall.ico" ;使用的UI !define MUI_UI "UI\mod.exe" ;使用ReserveFile是加快安裝包展開速度,具體請看幫助 ReserveFile "images\bg.bmp" ReserveFile "images\bg2.bmp" ReserveFile "images\bg3.bmp" ReserveFile "images\browse.bmp" ReserveFile "images\close.bmp" ReserveFile "images\custom.bmp" ReserveFile "images\empty_bg.bmp" ReserveFile "images\express.bmp" ReserveFile "images\finish.bmp" ReserveFile "images\full_bg.bmp" ReserveFile "images\onekey.bmp" ReserveFile "images\strongbtn.bmp" ReserveFile "images\weakbtn.bmp" ;輪展數據 ReserveFile "images\Slides.dat" ReserveFile "images\InstallingBG01.png" ReserveFile "images\InstallingBG02.png" ReserveFile "images\InstallingBG03.png" ReserveFile "images\InstallingBG04.png" ;DLL ReserveFile `${NSISDIR}\Plugins\x86-ansi\nsDialogs.dll` ReserveFile `${NSISDIR}\Plugins\x86-ansi\nsWindows.dll` ReserveFile `${NSISDIR}\Plugins\x86-ansi\SkinBtn.dll` ReserveFile `${NSISDIR}\Plugins\x86-ansi\SkinProgress.dll` ReserveFile `${NSISDIR}\Plugins\x86-ansi\System.dll` ReserveFile `${NSISDIR}\Plugins\x86-ansi\WndProc.dll` ReserveFile `${NSISDIR}\Plugins\x86-ansi\nsisSlideshow.dll` ReserveFile `${NSISDIR}\Plugins\x86-ansi\FindProcDLL.dll` ; ------ MUI 現代界面定義 (1.67 版本以上兼容) ------ !include "MUI.nsh" !include "WinCore.nsh" !include "nsWindows.nsh" !include "LogicLib.nsh" !include "WinMessages.nsh" !include "LoadRTF.nsh" !define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit ;自定義頁面 Page custom Page.1 Page.1leave ; 許可協議頁面 ;!define MUI_LICENSEPAGE_CHECKBOX ; 安裝目錄選擇頁面 ;!insertmacro MUI_PAGE_DIRECTORY ; 安裝過程頁面 !define MUI_PAGE_CUSTOMFUNCTION_SHOW InstFilesPageShow !insertmacro MUI_PAGE_INSTFILES ; 安裝完成頁面 Page custom Page.3 ;這個不要刪除,否則自動跳轉出問題 Page custom Page.4 ; 安裝卸載過程頁面 !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; 安裝界面包含的語言設置 !insertmacro MUI_LANGUAGE "SimpChinese" VIProductVersion "0.0.0.0" ;←↓版本啦 VIAddVersionKey /LANG=2052 "ProductName" "${PRODUCT_NAME}" VIAddVersionKey /LANG=2052 "Comments" "http://www.nbzycn.com/" ;請自己修改 VIAddVersionKey /LANG=2052 "CompanyName" "Tencent" VIAddVersionKey /LANG=2052 "LegalCopyright" "Copyright (c) yu" VIAddVersionKey /LANG=2052 "FileDescription" "${PRODUCT_NAME}" VIAddVersionKey /LANG=2052 "FileVersion" "${PRODUCT_VERSION}" ;------------------------------------------------------MUI 現代界面定義以及函數結束------------------------ Function .onInit InitPluginsDir ;初始化插件 StrCpy $Ckbox1_State ${BST_CHECKED} StrCpy $Ckbox2_State ${BST_CHECKED} StrCpy $Ckbox3_State ${BST_CHECKED} File `/ONAME=$PLUGINSDIR\bg.bmp` `images\bg.bmp` ;第一大背景 File `/oname=$PLUGINSDIR\bg2.bmp` `images\bg2.bmp` ;第二大背景 File `/oname=$PLUGINSDIR\bg3.bmp` `images\bg3.bmp` ;完成頁背景 File `/oname=$PLUGINSDIR\btn_onekey.bmp` `images\onekey.bmp` ;快速安裝 File `/oname=$PLUGINSDIR\btn_custom.bmp` `images\custom.bmp` ;自定義安裝 File `/oname=$PLUGINSDIR\btn_browse.bmp` `images\browse.bmp` ;瀏覽按鈕 File `/oname=$PLUGINSDIR\btn_strongbtn.bmp` `images\strongbtn.bmp` ;立即安裝 File `/oname=$PLUGINSDIR\btn_finish.bmp` `images\finish.bmp` ;安裝完成 File `/oname=$PLUGINSDIR\btn_weakbtn.bmp` `images\weakbtn.bmp` ;返回 File `/oname=$PLUGINSDIR\btn_express.bmp` `images\express.bmp` ;立即體驗 File `/oname=$PLUGINSDIR\btn_Close.bmp` `images\Close.bmp` ;關閉 ;進度條皮膚 File `/oname=$PLUGINSDIR\Progress.bmp` `images\empty_bg.bmp` File `/oname=$PLUGINSDIR\ProgressBar.bmp` `images\full_bg.bmp` ;協議 File `/oname=$PLUGINSDIR\license.rtf` `rtf\license.rtf` File `/oname=$PLUGINSDIR\Gracenote.rtf` `rtf\Gracenote.rtf` ;初始化 SkinBtn::Init "$PLUGINSDIR\btn_onekey.bmp" SkinBtn::Init "$PLUGINSDIR\btn_custom.bmp" SkinBtn::Init "$PLUGINSDIR\btn_browse.bmp" SkinBtn::Init "$PLUGINSDIR\btn_strongbtn.bmp" SkinBtn::Init "$PLUGINSDIR\btn_finish.bmp" SkinBtn::Init "$PLUGINSDIR\btn_weakbtn.bmp" SkinBtn::Init "$PLUGINSDIR\btn_express.bmp" SkinBtn::Init "$PLUGINSDIR\btn_Close.bmp" FunctionEnd Function onGUIInit ;檢查重復運行 System::Call 'kernel32::CreateMutexA(i 0, i 0, t "Scale3DC") i .r1 ?e' Pop $R1 ;;;;$$$$$安裝程序已經運行 StrCmp $R1 0 +3 MessageBox MB_OK|MB_ICONINFORMATION|MB_TOPMOST "程序已經在運行。" Abort ;檢測是否正在運行 RETRY: FindProcDLL::FindProc "Scalea3DC.exe" ;檢測的運行進程名稱 StrCmp $R0 1 0 +3 MessageBox MB_RETRYCANCEL|MB_ICONINFORMATION|MB_TOPMOST '檢測到 "${PRODUCT_NAME}" 正在運行,請先關閉後重試,或者點擊"取消"退出!' IDRETRY RETRY Quit ;消除邊框 System::Call `user32::SetWindowLong(i$HWNDPARENT,i${GWL_STYLE},0x9480084C)i.R0` ;隱藏一些既有控件 GetDlgItem $0 $HWNDPARENT 1034 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 1035 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 1036 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 1037 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 1038 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 1039 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 1256 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 1028 ShowWindow $0 ${SW_HIDE} ${NSW_SetWindowSize} $HWNDPARENT 589 439 ;改變主窗體大小 System::Call User32::GetDesktopWindow()i.R0 ;圓角 System::Alloc 16 System::Call user32::GetWindowRect(i$HWNDPARENT,isR0) System::Call *$R0(i.R1,i.R2,i.R3,i.R4) IntOp $R3 $R3 - $R1 IntOp $R4 $R4 - $R2 System::Call gdi32::CreateRoundRectRgn(i0,i0,iR3,iR4,i4,i4)i.r0 System::Call user32::SetWindowRgn(i$HWNDPARENT,ir0,i1) System::Free $R0 ; GetDlgItem $R0 $HWNDPARENT 1044 ; System::Call "user32::MoveWindow(i R0, i 0, i 0, i 374, i 153) i r2" FunctionEnd ;處理無邊框移動 Function onGUICallback ${If} $MSG = ${WM_LBUTTONDOWN} SendMessage $HWNDPARENT ${WM_NCLBUTTONDOWN} ${HTCAPTION} $0 ${EndIf} FunctionEnd Function Page.1 GetDlgItem $0 $HWNDPARENT 1 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 2 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 3 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 1990 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 1991 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 1992 ShowWindow $0 ${SW_HIDE} nsDialogs::Create 1044 Pop $0 ${If} $0 == error Abort ${EndIf} SetCtlColors $0 "" transparent ;背景設成透明 ${NSW_SetWindowSize} $0 588 438 ;改變Page大小 ;讀取RTF的文本框 nsDialogs::CreateControl "RichEdit20A" ${ES_READONLY}|${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_STATICEDGE} 16u 28u 360u 229u '' Pop $rtf_License ${LoadRTF} '$PLUGINSDIR\license.rtf' $rtf_License ShowWindow $rtf_License ${SW_HIDE} nsDialogs::CreateControl "RichEdit20A" ${ES_READONLY}|${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_STATICEDGE} 16u 28u 360u 229u '' Pop $Rtf_Gracenote ${LoadRTF} '$PLUGINSDIR\Gracenote.rtf' $Rtf_Gracenote ShowWindow $Rtf_Gracenote ${SW_HIDE} ;協議確定按鈕 ${NSD_CreateButton} 180u 263u 55 30 "確定" Pop $btn_Licenseback SkinBtn::Set /IMGID=$PLUGINSDIR\btn_weakbtn.bmp $btn_Licenseback GetFunctionAddress $3 Licenseback SkinBtn::onClick $btn_Licenseback $3 SetCtlColors $btn_Licenseback 7F7F7F transparent ShowWindow $btn_Licenseback ${SW_HIDE} ;第三方協議確定按鈕 ${NSD_CreateButton} 310u 263u 55 30 "確定" Pop $btn_Gracenoteback SkinBtn::Set /IMGID=$PLUGINSDIR\btn_weakbtn.bmp $btn_Gracenoteback GetFunctionAddress $3 Gracenoteback SkinBtn::onClick $btn_Gracenoteback $3 SetCtlColors $btn_Gracenoteback 7F7F7F transparent ShowWindow $btn_Gracenoteback ${SW_HIDE} ;自定義安裝按鈕 ${NSD_CreateButton} 310u 263u 98 17 "" Pop $btn_ins SkinBtn::Set /IMGID=$PLUGINSDIR\btn_custom.bmp $btn_ins GetFunctionAddress $3 onClickint SkinBtn::onClick $btn_ins $3 ;快速安裝 ${NSD_CreateButton} 126u 204u 252 64 "" Pop $btn_in SkinBtn::Set /IMGID=$PLUGINSDIR\btn_onekey.bmp $btn_in GetFunctionAddress $3 onClickins SkinBtn::onClick $btn_in $3 ;最小化按鈕 ; ${NSD_CreateButton} 350u 3u 22 22 "" ; Pop $btn_mini ; SkinBtn::Set /IMGID=$PLUGINSDIR\btn_mini.bmp $btn_mini ; GetFunctionAddress $3 onClickmini ; SkinBtn::onClick $btn_mini $3 ;關閉按鈕 ${NSD_CreateButton} 372u 8u 24 20 "" Pop $btn_Close SkinBtn::Set /IMGID=$PLUGINSDIR\btn_Close.bmp $btn_Close GetFunctionAddress $3 ABORT SkinBtn::onClick $btn_Close $3 ;立即安裝 ${NSD_CreateButton} 284u 260u 82 26 "立即安裝" Pop $btn_instetup SkinBtn::Set /IMGID=$PLUGINSDIR\btn_strongbtn.bmp $btn_instetup GetFunctionAddress $3 onClickins SkinBtn::onClick $btn_instetup $3 SetCtlColors $btn_instetup FFFFFF transparent ShowWindow $btn_instetup ${SW_HIDE} ;返回 ${NSD_CreateButton} 344u 260u 56 26 "返回" Pop $btn_back SkinBtn::Set /IMGID=$PLUGINSDIR\btn_weakbtn.bmp $btn_back GetFunctionAddress $3 onClickBack SkinBtn::onClick $btn_back $3 SetCtlColors $btn_back 7F7F7F transparent ShowWindow $btn_back ${SW_HIDE} #------------------------------------------ #許可協議 #------------------------------------------ ${NSD_CreateCheckbox} 17u 265u 63u 12u "同意臻譽的" Pop $Ckbox0 SetCtlColors $Ckbox0 "" FFFFFF ${NSD_Check} $Ckbox0 ${NSD_OnClick} $Ckbox0 Chklicense ${NSD_CreateLabel} 130u 267u 10u 12u "及" Pop $txt_ji SetCtlColors $txt_ji "" FFFFFF ;前景色,背景設成透明 ${NSD_CreateLink} 80u 267u 48u 10u "用戶許可協議" Pop $Txt_Xllicense SetCtlColors $Txt_Xllicense 5ba900 FFFFFF ${NSD_OnClick} $Txt_Xllicense xllicense ${NSD_CreateLink} 140u 267u 60u 10u "第三方用戶協議" Pop $Txt_Gracenote SetCtlColors $Txt_Gracenote 5ba900 FFFFFF ${NSD_OnClick} $Txt_Gracenote Gracenote #------------------------------------------ #可選項1 #------------------------------------------ ${NSD_CreateCheckbox} 17u 216u 80u 12u "創建桌面圖標" Pop $Ckbox1 SetCtlColors $Ckbox1 "" FFFFFF ;前景色,背景設成透明 ShowWindow $Ckbox1 ${SW_HIDE} ${NSD_Check} $Ckbox1 #------------------------------------------ #可選項2 #------------------------------------------ ; ${NSD_CreateCheckbox} 130u 216u 80u 12u "添加到快速啟動欄" ; Pop $Ckbox2 ; SetCtlColors $Ckbox2 "" FFFFFF ;前景色,背景設成透明 ; ShowWindow $Ckbox2 ${SW_HIDE} ; ${NSD_Check} $Ckbox2 #------------------------------------------ #可選項3 #------------------------------------------ ; ${NSD_CreateCheckbox} 240u 216u 90u 12u "設為默認音樂播放器" ; Pop $Ckbox3 ; SetCtlColors $Ckbox3 "" FFFFFF ;前景色,背景設成透明 ; ShowWindow $Ckbox3 ${SW_HIDE} ;${NSD_SetState} $Checkbox1 ${BST_CHECKED} ;創建安裝目錄輸入文本框 ${NSD_CreateText} 21u 183u 290u 22u "${DIR}" Pop $Txt_Browser SetCtlColors $Txt_Browser "" FFFFFF ;背景設成透明 ;${NSD_AddExStyle} $Txt_Browser ${WS_EX_WINDOWEDGE} CreateFont $1 "tahoma" "10" "500" SendMessage $Txt_Browser ${WM_SETFONT} $1 1 ShowWindow $Txt_Browser ${SW_HIDE} ;創建更改路徑文件夾按鈕 ${NSD_CreateButton} 312u 273U 76 36 "瀏覽..." Pop $btn_Browser SkinBtn::Set /IMGID=$PLUGINSDIR\btn_browse.bmp $btn_Browser GetFunctionAddress $3 onClickSelectPath SkinBtn::onClick $btn_Browser $3 SetCtlColors $btn_Browser 7F7F7F transparent ;前景色,背景設成透明 ShowWindow $btn_Browser ${SW_HIDE} ${NSD_CreateBitmap} 0 0 100% 100% "" Pop $BGImage1 ${NSD_SetImage} $BGImage1 $PLUGINSDIR\bg2.bmp $ImageHandle1 ShowWindow $BGImage1 ${SW_HIDE} ;貼背景大圖 ${NSD_CreateBitmap} 0 0 100% 100% "" Pop $BGImage ${NSD_SetImage} $BGImage $PLUGINSDIR\bg.bmp $ImageHandle GetFunctionAddress $0 onGUICallback WndProc::onCallback $BGImage $0 ;處理無邊框窗體移動 WndProc::onCallback $BGImage1 $0 ;處理無邊框窗體移動 nsDialogs::Show ${NSD_FreeImage} $ImageHandle ${NSD_FreeImage} $ImageHandle1 FunctionEnd Function Page.1leave ${NSD_GetState} $Ckbox1 $Ckbox1_State ${NSD_GetState} $Ckbox2 $Ckbox2_State ${NSD_GetState} $Ckbox3 $Ckbox3_State FunctionEnd Function InstFilesPagePRO GetDlgItem $0 $HWNDPARENT 1 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 2 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 3 FunctionEnd Function InstFilesPageShow FindWindow $R2 "#32770" "" $HWNDPARENT ShowWindow $0 ${SW_HIDE} GetDlgItem $1 $R2 1027 ShowWindow $1 ${SW_HIDE} ;存入輪展圖片 File '/oname=$PLUGINSDIR\Slides.dat' 'images\Slides.dat' File '/oname=$PLUGINSDIR\InstallingBG01.png' 'images\InstallingBG01.png' File '/oname=$PLUGINSDIR\InstallingBG02.png' 'images\InstallingBG02.png' File '/oname=$PLUGINSDIR\InstallingBG03.png' 'images\InstallingBG03.png' File '/oname=$PLUGINSDIR\InstallingBG04.png' 'images\InstallingBG04.png' StrCpy $R0 $R2 ;改變頁面大小,不然貼圖不能全頁 System::Call "user32::MoveWindow(i R0, i 0, i 0, i 588, i 438) i r2" GetFunctionAddress $0 onGUICallback WndProc::onCallback $R0 $0 ;處理無邊框窗體移動 GetDlgItem $R0 $R2 1004 ;設置進度條位置 System::Call "user32::MoveWindow(i R0, i 30, i 302, i 537, i 12) i r2" GetDlgItem $R1 $R2 1006 ;進度條上面的標簽 SetCtlColors $R1 "" FFFFFF ;背景設成F6F6F6,註意顏色不能設為透明,否則重疊 System::Call "user32::MoveWindow(i R1, i 30, i 275, i 290, i 12) i r2" GetDlgItem $R8 $R2 1016 ;SetCtlColors $R8 "" F6F6F6 ;背景設成F6F6F6,註意顏色不能設為透明,否則重疊 System::Call "user32::MoveWindow(i R8, i 0, i 0, i 588, i 216) i r2" FindWindow $R2 "#32770" "" $HWNDPARENT ;獲取1995並設置圖片 GetDlgItem $R0 $R2 1995 System::Call "user32::MoveWindow(i R0, i 0, i 0, i 498, i 373) i r2" ${NSD_SetImage} $R0 $PLUGINSDIR\bg2.bmp $ImageHandle ;這裏是給進度條貼圖 FindWindow $R2 "#32770" "" $HWNDPARENT GetDlgItem $5 $R2 1004 SkinProgress::Set $5 "$PLUGINSDIR\ProgressBar.bmp" "$PLUGINSDIR\Progress.bmp" FunctionEnd ;完成頁面 Function Page.3 GetDlgItem $0 $HWNDPARENT 1 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 2 ShowWindow $0 ${SW_HIDE} GetDlgItem $0 $HWNDPARENT 3 ShowWindow $0 ${SW_HIDE} nsDialogs::Create 1044 Pop $0 ${If} $0 == error Abort ${EndIf} SetCtlColors $0 "" transparent ;背景設成透明 ${NSW_SetWindowSize} $0 588 438 ;改變Page大小 ${NSD_CreateCheckbox} 20u 160u 166u 10u "立刻啟動Scale3DC稱重軟件" Pop $Ckbox4 SetCtlColors $Ckbox4 "" FFFFFF ;ShowWindow $Ckbox4 ${SW_HIDE} ;如果不需要可以使用這行隱藏 ;${NSD_Check} $Ckbox4 ;默認勾選 ; ${NSD_CreateCheckbox} 20u 180u 200u 10u "推薦您安裝QQ遊戲,全球最大在線休閑遊戲平臺" ; Pop $ckbox5 ; SetCtlColors $ckbox5 "" FFFFFF ;ShowWindow $ckbox5 ${SW_HIDE} ;如果不需要可以使用這行隱藏 ;${NSD_Check} $ckbox5 ;默認勾選 ${NSD_CreateLink} 277u 122u 56u 10u "臻譽官網下載" Pop $1 SetCtlColors $1 FFFFFF B0B18D ${NSD_OnClick} $1 onClickmusic ;立即體驗 ${NSD_CreateButton} 86u 226u 160 54 "" Pop $btn_instend SkinBtn::Set /IMGID=$PLUGINSDIR\btn_express.bmp $btn_instend GetFunctionAddress $3 onClickexpress SkinBtn::onClick $btn_instend $3 ;安裝完成 ${NSD_CreateButton} 200u 226u 160 54 "" Pop $btn_instend1 SkinBtn::Set /IMGID=$PLUGINSDIR\btn_finish.bmp $btn_instend1 GetFunctionAddress $3 onClickend SkinBtn::onClick $btn_instend1 $3 ;貼背景大圖 ${NSD_CreateBitmap} 0 0 100% 100% "" Pop $BGImage ${NSD_SetImage} $BGImage $PLUGINSDIR\bg3.bmp $ImageHandle GetFunctionAddress $0 onGUICallback WndProc::onCallback $BGImage $0 ;處理無邊框窗體移動 nsDialogs::Show ${NSD_FreeImage} $ImageHandle FunctionEnd Function Page.4 FunctionEnd Section MainSetup DetailPrint "正在安裝..." Sleep 1000 SetDetailsPrint None ;不顯示信息 nsisSlideshow::Show /NOUNLOAD /auto=$PLUGINSDIR\Slides.dat Sleep 500 ;在安裝程序裏暫停執行 "休眠時間(單位為:ms)" 毫秒。"休眠時間(單位為:ms)" 可以是一個變量, 例如 "$0" 或一個數字,例如 "666"。 SetOutPath $INSTDIR ; 打包實體內容 File /r "C:\Program Files (x86)\Scale3DC\*.*" ; 註冊組件 RegDLL "$INSTDIR\grdes6.dll" RegDLL "$INSTDIR\gregn6.dll" ;Store installation folder保存安裝文件夾件 WriteRegStr HKCU "Software\Scale3DC" "" $INSTDIR ;在桌面上建立快捷方式。 CreateShortCut "$DESKTOP\Scale3DC稱重軟件.lnk" "$INSTDIR\Scale3DC.exe" CreateShortCut "$DESKTOP\ZYCOMM串口調試工具v4.0.lnk" "$INSTDIR\ZYCOMM\ZYCOMM.exe" ;----------------------------------------------------- ;Create uninstaller創建卸載程序 ${If} ${RunningX64} ${DisableX64FSRedirection} WriteUninstaller "$INSTDIR\uninst.exe" ${EnableX64FSRedirection} ${else} WriteUninstaller "$INSTDIR\uninst.exe" ${endif} WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" Sleep 50 Sleep 50 Sleep 50 Sleep 500 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 500 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 500 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 500 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 Sleep 50 /* ${If} $Ckbox1_State == 1 DetailPrint "現在是選中狀態,這裏可以寫代碼" ${EndIf} */ ;MessageBox MB_OK '判斷選中項,選中為1,否則0:$\r$\n創建桌面圖標:安裝目錄:$INSTDIR' nsisSlideshow::Stop SetAutoClose true SectionEnd Section -AdditionalIcons SetOutPath $INSTDIR WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateDirectory "$SMPROGRAMS\Scale3DC" CreateShortCut "$SMPROGRAMS\Scale3DC\Scale3DC.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\Scale3DC\Uninstall.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" SectionEnd Function ABORT MessageBox MB_ICONQUESTION|MB_YESNO|MB_ICONSTOP '您確定要退出"Scale3DC2018"安裝程序?' IDNO CANCEL SendMessage $hwndparent ${WM_CLOSE} 0 0 CANCEL: Abort FunctionEnd ;處理頁面跳轉的命令 Function RelGotoPage IntCmp $R9 0 0 Move Move StrCmp $R9 "X" 0 Move StrCpy $R9 "120" Move: SendMessage $HWNDPARENT "0x408" "$R9" "" FunctionEnd Function onClickins ${NSD_GetText} $Txt_Browser $R0 ;獲得設置的安裝路徑 ;判斷目錄是否正確 ClearErrors CreateDirectory "$R0" IfErrors 0 +3 MessageBox MB_ICONINFORMATION|MB_OK "'$R0' 安裝目錄不存在,請重新設置。" Return StrCpy $INSTDIR $R0 ;保存安裝路徑 StrCpy $R9 1 ;Goto the next page Call RelGotoPage Abort FunctionEnd ;當單擊自定義安裝後隱藏和顯示一部分控件 Function onClickint ShowWindow $BGImage ${SW_HIDE} ShowWindow $Ckbox0 ${SW_HIDE} ShowWindow $Txt_Xllicense ${SW_HIDE} ShowWindow $Txt_Gracenote ${SW_HIDE} ShowWindow $Txt_ji ${SW_HIDE} ShowWindow $btn_in ${SW_HIDE} ShowWindow $btn_ins ${SW_HIDE} ShowWindow $BGImage1 ${SW_SHOW} ShowWindow $btn_instetup ${SW_SHOW} ShowWindow $btn_back ${SW_SHOW} ShowWindow $Ckbox1 ${SW_SHOW} ShowWindow $Ckbox2 ${SW_SHOW} ShowWindow $Ckbox3 ${SW_SHOW} ShowWindow $btn_Browser ${SW_SHOW} ShowWindow $Txt_Browser ${SW_SHOW} FunctionEnd ;點擊返回時隱藏顯示部分控件 Function onClickBack ShowWindow $BGImage1 ${SW_HIDE} ShowWindow $BGImage ${SW_SHOW} ShowWindow $Ckbox0 ${SW_SHOW} ShowWindow $Txt_Xllicense ${SW_SHOW} ShowWindow $Txt_Gracenote ${SW_SHOW} ShowWindow $Txt_ji ${SW_SHOW} ShowWindow $btn_in ${SW_HIDE} ShowWindow $btn_ins ${SW_HIDE} ShowWindow $btn_in ${SW_SHOW} ShowWindow $btn_ins ${SW_SHOW} ShowWindow $BGImage1 ${SW_HIDE} ShowWindow $btn_instetup ${SW_HIDE} ShowWindow $btn_back ${SW_HIDE} ShowWindow $Ckbox1 ${SW_HIDE} ShowWindow $Ckbox2 ${SW_HIDE} ShowWindow $Ckbox3 ${SW_HIDE} ShowWindow $btn_Browser ${SW_HIDE} ShowWindow $Txt_Browser ${SW_HIDE} FunctionEnd #------------------------------------------ #許可協議 #------------------------------------------ Function xllicense ShowWindow $Ckbox0 ${SW_HIDE} ShowWindow $Txt_Xllicense ${SW_HIDE} ShowWindow $Txt_Gracenote ${SW_HIDE} ShowWindow $Txt_ji ${SW_HIDE} ShowWindow $btn_in ${SW_HIDE} ShowWindow $btn_ins ${SW_HIDE} ShowWindow $rtf_License ${SW_SHOW} ShowWindow $btn_Licenseback ${SW_SHOW} ShowWindow $rtf_License ${SW_SHOW} FunctionEnd ;點擊協議下方的按鈕執行 Function Licenseback ShowWindow $Ckbox0 ${SW_SHOW} ShowWindow $Txt_Xllicense ${SW_SHOW} ShowWindow $Txt_Gracenote ${SW_SHOW} ShowWindow $Txt_ji ${SW_SHOW} ShowWindow $btn_in ${SW_SHOW} ShowWindow $btn_ins ${SW_SHOW} ShowWindow $btn_ins ${SW_SHOW} ShowWindow $btn_Licenseback ${SW_HIDE} ShowWindow $rtf_License ${SW_HIDE} ShowWindow $Rtf_Gracenote ${SW_HIDE} FunctionEnd Function Gracenote ShowWindow $Ckbox0 ${SW_HIDE} ShowWindow $Txt_Xllicense ${SW_HIDE} ShowWindow $Txt_Gracenote ${SW_HIDE} ShowWindow $rtf_License ${SW_HIDE} ShowWindow $Txt_ji ${SW_HIDE} ShowWindow $btn_in ${SW_HIDE} ShowWindow $btn_ins ${SW_HIDE} ShowWindow $btn_Licenseback ${SW_SHOW} ShowWindow $rtf_Gracenote ${SW_SHOW} FunctionEnd ;點擊第三方協議下的確定按鈕執行 Function Gracenoteback ShowWindow $rtf_License ${SW_HIDE} ShowWindow $Rtf_Gracenote ${SW_HIDE} ShowWindow $btn_Gracenoteback ${SW_HIDE} ShowWindow $Ckbox0 ${SW_SHOW} ShowWindow $Txt_Xllicense ${SW_SHOW} ShowWindow $Txt_Gracenote ${SW_SHOW} ShowWindow $Txt_ji ${SW_SHOW} ShowWindow $btn_in ${SW_SHOW} ShowWindow $btn_ins ${SW_SHOW} ShowWindow $btn_ins ${SW_SHOW} FunctionEnd Function onClickmusic ExecShell "open" "http://www.nbzycn.com" FunctionEnd #------------------------------------------ #是否選中許可協議判斷 #------------------------------------------ Function Chklicense Pop $Ckbox0 ${NSD_GetState} $Ckbox0 $0 ${If} $0 == 1 EnableWindow $btn_ins 1 ;對指定的窗口或控件是否允許鍵入0禁止 EnableWindow $btn_in 1 ${Else} EnableWindow $btn_ins 0 ;對指定的窗口或控件是否允許鍵入0禁止 EnableWindow $btn_in 0 ${EndIf} FunctionEnd #-------------------------------------------------------- # 路徑選擇按鈕事件,打開Windows系統自帶的目錄選擇對話框 #-------------------------------------------------------- Function onClickSelectPath ${NSD_GetText} $Txt_Browser $0 nsDialogs::SelectFolderDialog "請選擇 ${PRODUCT_NAME} 安裝目錄:" "$0" Pop $0 ${IfNot} $0 == error ${NSD_SetText} $Txt_Browser $0 ${EndIf} FunctionEnd ;立即體驗檢測 Function onClickexpress ${NSD_GetState} $Ckbox4 $0 ${If} $0 == 1 ;MessageBox MB_OK '選中:立即啟動Scale3DC稱重軟件' ;判斷選中時的操作,實際代碼需要自己修改 ExecShell "open" "$INSTDIR\Scale3DC.exe" ${EndIf} ;${NSD_GetState} $Ckbox5 $0 ; ${if} $0 = 1 ; MessageBox MB_OK '選中:推薦安裝QQ遊戲' ;判斷選中時的操作,實際代碼需要自己修改 ; ${EndIf} ;Exec "$INSTDIR\qqmusic.exe" ;這個不需要選中也操作,即運行QQ音樂 ;MessageBox MB_OK '運行Scale3DC稱重軟件' ;ExecShell "open" "$INSTDIR\Scale3DC.exe" SendMessage $hwndparent ${WM_CLOSE} 0 0 FunctionEnd ;完成頁面完成按鈕 Function onClickend ${NSD_GetState} $Ckbox4 $0 ${If} $0 == 1 MessageBox MB_OK '選中:開機自動啟動' ;判斷選中時的操作,實際代碼需要自己修改 ExecShell "open" "$INSTDIR\Scale3DC.exe" ${EndIf} ;${NSD_GetState} $Ckbox5 $0 ; ${if} $0 = 1 ; MessageBox MB_OK '選中:推薦安裝QQ遊戲' ;判斷選中時的操作,實際代碼需要自己修改 ; ${EndIf} ;ExecShell "open" "$INSTDIR\Scale3DC.exe" SendMessage $hwndparent ${WM_CLOSE} 0 0 FunctionEnd Section "Uninstall" ;ADD YOUR OWN FILES HERE... Delete "$INSTDIR\Uninstall.exe" Delete "$INSTDIR\*.*" Delete "$DESKTOP\Scale3DC稱重軟件.lnk" Delete "$DESKTOP\ZYCOMM串口調試工具v4.0.lnk" RMDir /r "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey /ifempty HKLM "${PRODUCT_UNINST_KEY}" SectionEnd


NSIS安裝包腳本