正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- ;安装目录
- Var LoadFileLabrary
- #自定义页面中的变量
- ;var txt_LicensePage
- ;界面上半部分的图片
- Var TopImage
- ;界面的背景图片
- Var BGImage
- Var ImageHandle
- ;界面上立即安装的按钮
- Var Btn_Install
- ;Var Bool_Install ;定义的一个Bool值,用于是否显示
- ;界面关闭按钮
- Var Btn_Close
-
- #安装路径的变量
- Var Btn_LoadPath
- ;创建checkBox
- Var Ck_AgreeLicense ;界面上同意协议check框
- Var Bool_AgreeLicense ;界面上同意协议check框的bool判定
- Var Lbl_AgreeLicense ;界面上同意协议lbl文字
-
- ;正在安装的界面
- #正在安装
- ;进度条变量
- Var PB_ProgressBar
- ;正在安装的变量
- var Lbl_Sumary
- ;网页控件
- Var WebImg
- ;背景图片
- Var BGInstallImage
- Var Btn_LoadingPage_Close ;关闭安装界面
- Var Lbl_ProgressPercent ;1%
- Var ProgressPercent ;进度条中间值
- Var txt_ImgPage ;动态图片显示在txt框中
-
- #更改目录的界面
- ;文本框
- Var Txt_Browser
- ;按钮
- Var Btn_Browser
- ;返回前一页的按钮
- Var Btn_BackPath
- Var Btn_PathPage_Close ;关闭按钮
-
- #安装完成的界面
- Var Bg_FinishImage
- Var Btn_Finish ;完成的按钮
- Var Btn_FinishPage_Close ;关闭界面的按钮
- Var Lbl_DesktopShortCut ;桌面的快捷方式文本
- Var Ck_DesktopShortCut ;桌面的快捷方式checkbox
- Var Lbl_taskbarpin ;任务栏的快捷方式文本
- Var Ck_taskbarpin ;任务栏的快捷方式checkbox
- Var Bool_DesktopShortCut ;桌面的快捷方式的bool值判定
- Var Bool_taskbarpin ;任务栏的快捷方式的bool值判定
-
- Var J3
- Var PRODUCT_NAME
- Var PRODUCT_NAMEEXE
- Var PRODUCT_INSTALL_KEY
- Var PRODUCT_UNINST_KEY
- Var PRODUCT_VERSION_NAME
- Var PRODUCT_VERSION_NO
- Var PRODUCT_OUTFILE_MAIN7z
-
- ; 该脚本使用 HM VNISEdit 脚本编辑器向导产生
- ; 安装程序初始定义常量
- !define PRODUCT_NAME "pkpm"
- !define PRODUCT_VERSION "1.0"
- !define PRODUCT_PUBLISHER "My company, Inc."
- !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
- !define PRODUCT_INSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Install\${PRODUCT_NAME}"
-
- !define PRODUCT_UNINST_ROOT_KEY "HKLM"
-
- SetCompressor lzma
- ;BrandingText "${EM_BrandingText}"
- SetCompress force
- XPStyle on
-
- ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
-
- !include "MUI.nsh"
- !include "MUI2.nsh"
- !include "WinCore.nsh"
- ;引用文件函数头文件
- !include "FileFunc.nsh"
- !include "nsWindows.nsh"
- !include "LoadRTF.nsh"
- !include "WinMessages.nsh"
- ;循环语句需要的头文件操作
- !include "LogicLib.nsh"
-
- ; MUI 预定义常量
- !define MUI_ABORTWARNING
- ;安装图标的路径名字
- !define MUI_ICON "images\fav.ico"
- ;卸载图标的路径名字
- !define MUI_UNICON "images\fav.ico"
-
- ;自定义初始化
- !define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit
- ;自定义欢迎页面
- Page custom WelcomePage
- ;自定义修改安装路径的页面
- Page custom PathPage
- ;自定义安装进度页面
- Page custom LoadingPage
- ;自定义安装完成页面
- Page custom FinishPage
-
- ; 欢迎页面
- !insertmacro MUI_PAGE_WELCOME
- ;许可协议页面
- !define MUI_LICENSEPAGE_CHECKBOX
- !insertmacro MUI_PAGE_LICENSE "aa.txt"
- ; 安装目录选择页面
- !insertmacro MUI_PAGE_DIRECTORY
- ; 安装过程页面
- !insertmacro MUI_PAGE_INSTFILES
- ; 安装完成页面
- !insertmacro MUI_PAGE_FINISH
-
- ; 安装卸载过程页面
- !insertmacro MUI_UNPAGE_INSTFILES
- ; 安装界面包含的语言设置
- !insertmacro MUI_LANGUAGE "SimpChinese"
- ; 安装预释放文件
- !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
- ; ------ MUI 现代界面定义结束 ------
-
- Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
- OutFile "pkpm.exe"
- ;InstallDir "$PROGRAMFILES\pkpm"
- ;InstallDir "$INSTDIR\pkpm"
- ShowInstDetails show
- ShowUnInstDetails show
-
- !define /math PBM_SETRANGE32 ${WM_USER} + 6 #定义nsis未包含的进度条相关常量
- #编写:水晶石
- InstallDir "C:\pkpm"
- !define PRODUCT_OUTFILE_MAIN "Main.7z" #对应主程序压缩包名称
- /*
- 该属性让安装程序去检测一注册表里的一个字串,
- 如果该字串可用那么把它用来作为安装目录。
- 如果预置了该属性,当指定的注册表键可用时它会越过 InstallDir 指定的字串,
- 否则使用默认的 InstallDir 指定值。查询注册表时,该命令将自动截去引号
- */
- ;!define PRODUCT_INSTALL_KEY "SOFTWARE\PKPM\Electron"
- ;InstallDirRegKey HKLM Software\NSIS "" 根键 子键 键名
- ;InstallDirRegKey HKLM "$PRODUCT_INSTALL_KEY" "C:\pkpm"
-
- Section MainSetup
- SectionEnd
-
- #检测程序是否正在运行
- Function IsProgramRunning
- FindProcDLL::FindProc "Electron.exe"
- Pop $R0
- IntCmp $R0 1 0 no_run
- MessageBox MB_ICONSTOP "安装程序检测到 Electron.exe 正在运行,请退出程序后重试"
- Quit
- no_run:
- FunctionEnd
-
- #检查程序的版本号
- Function CompareVersion
- ReadRegStr $0 HKLM ${PRODUCT_INSTALL_KEY} "Version" ;PRODUCT_VERSION ;用户变量(输出) 根键 子键 项
- ${IF} $0 != ""
- IntCmp ${PRODUCT_VERSION} $0 0 Old New
- MessageBox MB_YESNO "安装程序检测到 $PRODUCT_NAME 已经安装,是否覆盖安装" IDYES Y IDNO N
- N:
- Quit
- Old:
- MessageBox MB_ICONSTOP "安装程序检测到 $PRODUCT_NAME 已经安装了更新版本"
- Quit
- New:
- MessageBox MB_ICONSTOP "安装程序检测到 $PRODUCT_NAME 已经安装了旧版本,继续更新安装"
- ${ENDIF}
- Y:
- FunctionEnd
-
- Function DefineReadINI
- SetOutPath $TEMP
- SetOverwrite on
- File "setup.ini"
- ReadINIStr $PRODUCT_NAME $TEMP\setup.ini SETUP_define PRODUCT_NAME
- ReadINIStr $PRODUCT_NAMEEXE $TEMP\setup.ini SETUP_define PRODUCT_NAMEEXE
- ReadINIStr $PRODUCT_INSTALL_KEY $TEMP\setup.ini SETUP_define PRODUCT_INSTALL_KEY
- ReadINIStr $PRODUCT_UNINST_KEY $TEMP\setup.ini SETUP_define PRODUCT_UNINST_KEY
- ReadINIStr $PRODUCT_VERSION_NAME $TEMP\setup.ini SETUP_define PRODUCT_VERSION_NAME
- ReadINIStr $PRODUCT_VERSION_NO $TEMP\setup.ini SETUP_define PRODUCT_VERSION_NO
- ReadINIStr $PRODUCT_OUTFILE_MAIN7z $TEMP\setup.ini SETUP_define PRODUCT_OUTFILE_MAIN7z
- FunctionEnd
-
- ;初始化必须要调用的组件
- Function .onInit
- InitPluginsDir
- Call IsProgramRunning #检测程序是否正在运行
- Call CompareVersion #检查程序的版本号
-
- ;显示动态的图片
- File `/oname=$PLUGINSDIR\index.html` `images\index.html`
- File `/oname=$PLUGINSDIR\loading_pic1.bmp` `images\loading_pic1.bmp`
- File `/oname=$PLUGINSDIR\loading_pic2.bmp` `images\loading_pic2.bmp`
- File `/oname=$PLUGINSDIR\loading_pic3.bmp` `images\loading_pic3.bmp`
- File `/oname=$PLUGINSDIR\loading_pic4.bmp` `images\loading_pic4.bmp`
- File `/oname=$PLUGINSDIR\license.rtf` `license\license.rtf`
- File `/oname=$PLUGINSDIR\License.html` `images\License.html`
- ;背景图片
- File `/ONAME=$PLUGINSDIR\bg.bmp` `images\bg.bmp`
- ;顶部图片
- File `/ONAME=$PLUGINSDIR\welcome.bmp` `images\welcome.bmp`
- File `/ONAME=$PLUGINSDIR\a.png` `images\a.png`
- ;关闭按钮
- File `/oname=$PLUGINSDIR\btn_close.bmp` `images\btn_close.bmp`
- ;立即安装的图片
- File `/oname=$PLUGINSDIR\btn_install.bmp` `images\btn_install.bmp`
- ;退出的背景图片
- File `/ONAME=$PLUGINSDIR\quit.bmp` `images\quit.bmp`
- ;改变路径的按钮图片
- File `/oname=$PLUGINSDIR\btn_agreement1.bmp` `images\btn_agreement1.bmp`
- File `/oname=$PLUGINSDIR\btn_agreement2.bmp` `images\btn_agreement2.bmp`
- File `/oname=$PLUGINSDIR\checkbox1.bmp` `images\checkbox1.bmp`
- File `/oname=$PLUGINSDIR\checkbox2.bmp` `images\checkbox2.bmp`
- ;安装界面的图片
- File `/oname=$PLUGINSDIR\installation.bmp` `images\installation.bmp`
- File `/oname=$PLUGINSDIR\loading1.bmp` `images\loading1.bmp`
- File `/oname=$PLUGINSDIR\loading2.bmp` `images\loading2.bmp`
- #更改路径的界面
- File `/oname=$PLUGINSDIR\btn_change.bmp` `images\btn_change.bmp`
- #安装完成界面
- File `/oname=$PLUGINSDIR\bg_finish.bmp` `images\bg_finish.bmp` ;安装完成的背景图片
- File `/oname=$PLUGINSDIR\btn_complete.bmp` `images\btn_complete.bmp`
-
- SkinBtn::Init "$PLUGINSDIR\btn_install.bmp"
- SkinBtn::Init "$PLUGINSDIR\btn_close.bmp"
- SkinBtn::Init "$PLUGINSDIR\btn_quit.bmp"
- SkinBtn::Init "$PLUGINSDIR\btn_cancel.bmp"
- SkinBtn::Init "$PLUGINSDIR\btn_agreement1.bmp"
- SkinBtn::Init "$PLUGINSDIR\btn_agreement2.bmp"
- SkinBtn::Init "$PLUGINSDIR\checkbox1.bmp"
- SkinBtn::Init "$PLUGINSDIR\checkbox2.bmp"
- SkinBtn::Init "$PLUGINSDIR\btn_change.bmp"
- SkinBtn::Init "$PLUGINSDIR\btn_complete.bmp"
-
- FunctionEnd
-
- ;初始化的函数
- Function onGUIInit
- ;消除边框
- 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}
- FunctionEnd
-
- ;处理无边框移动
- Function onGUICallback
- ${If} $MSG = ${WM_LBUTTONDOWN}
- SendMessage $HWNDPARENT ${WM_NCLBUTTONDOWN} ${HTCAPTION} $0
- ${EndIf}
- FunctionEnd
-
- Function onWarningGUICallback
- ${If} $MSG = ${WM_LBUTTONDOWN}
- SendMessage $WarningForm ${WM_NCLBUTTONDOWN} ${HTCAPTION} $0
- ${EndIf}
- FunctionEnd
-
- ;关闭函数
- Function SkinBtn_Close
- SkinBtn::Set /IMGID=$PLUGINSDIR\btn_close.bmp $1
- FunctionEnd
-
- ;安装的函数
- Function SkinBtn_Install
- SkinBtn::Set /IMGID=$PLUGINSDIR\btn_install.bmp $1
- FunctionEnd
-
- ;取消
- Function SkinBtn_Cancel
- SkinBtn::Set /IMGID=$PLUGINSDIR\btn_cancel.bmp $1
- FunctionEnd
-
- ;退出
- Function SkinBtn_Quit
- SkinBtn::Set /IMGID=$PLUGINSDIR\btn_quit.bmp $1
- FunctionEnd
-
- ;改变路径的按钮
- Function SkinBtn_Modify
- SkinBtn::Set /IMGID=$PLUGINSDIR\btn_agreement1.bmp $1
- FunctionEnd
- ;checkBox
- Function SkinBtn_Checked
- SkinBtn::Set /IMGID=$PLUGINSDIR\checkbox2.bmp $1
- FunctionEnd
-
- Function SkinBtn_UnChecked
- SkinBtn::Set /IMGID=$PLUGINSDIR\checkbox1.bmp $1
- FunctionEnd
-
- Function SkinBtn_HtmlLicense
- SkinBtn::Set /IMGID=$PLUGINSDIR\btn_agreement2.bmp $1
- FunctionEnd
-
- #更改路径页面
- ;浏览按钮
- Function SkinBtn_Browser
- SkinBtn::Set /IMGID=$PLUGINSDIR\btn_change.bmp $1
- FunctionEnd
-
- ;返回前一页的按钮
- Function SkinBtn_BackPath
- SkinBtn::Set /IMGID=$PLUGINSDIR\btn_agreement1.bmp $1
- FunctionEnd
-
- #安装完成页面
- Function SkinBtn_Finish
- SkinBtn::Set /IMGID=$PLUGINSDIR\btn_complete.bmp $1
- FunctionEnd
-
- ############################################欢迎页面中的事件############################################
- ;点击许可协议的按钮
- Function onClickHtmlLicense
- ;MessageBox MB_OK '两个都为空!'
- ExecShell open "$PLUGINSDIR\License.html"
- FunctionEnd
-
- ;点击checkBox同意协议与不同意协议时的处理事件
- Function OnClick_CheckAgreeLicense
- ${IF} $Bool_AgreeLicense == 1
- IntOp $Bool_AgreeLicense $Bool_AgreeLicense - 1
- StrCpy $1 $Ck_AgreeLicense
- Call SkinBtn_UnChecked
- EnableWindow $Btn_Install 0 ;是否显示按钮
- ${ELSE}
- IntOp $Bool_AgreeLicense $Bool_AgreeLicense + 1
- StrCpy $1 $Ck_AgreeLicense
- Call SkinBtn_Checked
- EnableWindow $Btn_Install 1
- ${EndIf}
- FunctionEnd
-
- ;点击修改路径按钮的事件,跳转到修改路径的页面
- Function OnClick_Modify
- StrCpy $R9 1 ;Goto the next page
- ;执行下一个页面
- Call RelGotoPage
- Abort ;修改的地方
- FunctionEnd
-
- ;点击右上角关闭按钮
- Function onClickClose
- #关闭窗体的方法一:
- FindProcDLL::FindProc "pkpm.exe"
- Sleep 10
- Pop $R0
- ${If} $R0 != 0
- KillProcDLL::KillProc "pkpm.exe"
- ${EndIf}
- #关闭窗体的方法二:
- ;SendMessage $hwndparent ${WM_CLOSE} 0 0
- FunctionEnd
-
- ;点击关闭按钮响应的函数
- Function onClose
- Call onClickClose ;点击关闭响应的事件
- FunctionEnd
-
- ############################################安装页面中的事件############################################
-
- ;安装界面的函数
- Function NSD_TimerFun
- GetFunctionAddress $0 NSD_TimerFun
- nsDialogs::KillTimer $0
- !if 1 ;是否在后台运行,1有效
- GetFunctionAddress $0 DiskFrameWorkSpaceCheck
- BgWorker::CallAndWait
- !else
- Call DiskFrameWorkSpaceCheck ;调用背景图片
- !endif
- FunctionEnd
-
- ;点击安装按钮的事件,进入到安装界面
- Function OnClick_Install
- StrCpy $R9 2 ;Goto the next page
- ;执行下一个页面
- Call RelGotoPage
- 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 DiskFrameWorkSpaceCheck
- StrCpy $2 $INSTDIR 3
- ${DriveSpace} "$2" "/D=F /S=M" $R0
- ReadRegStr $8 HKLM 'Hardware\Description\System\CentralProcessor\0' Identifier
- StrCpy $9 $8 3
- ${If} $9 == 'x86'
- ${If} $R0 < 90
- MessageBox MB_ICONINFORMATION|MB_OK "安装空间不够"
- Abort
- ;Call onClickClose ;点击关闭响应的事件
- ${EndIf}
- ${Else}
- ${If} $R0 < 610
- MessageBox MB_ICONINFORMATION|MB_OK "安装空间不够"
- ;Call onClickClose ;点击关闭响应的事件
- Abort
- ${EndIf}
- ${EndIf}
- FunctionEnd
-
- ;主程序小于50mb判断
- Function DiskProgramSpaceCheck
- StrCpy $2 $INSTDIR 3
- ${DriveSpace} "$2" "/D=F /S=M" $R0
- ${If} $R0 < 10
- MessageBox MB_ICONINFORMATION|MB_OK "主程序安装空间不够"
- Abort
- ${EndIf}
- FunctionEnd
-
- ;改变安装的路径
- Function OnChange_DirRequest
- ${NSD_GetText} $Txt_Browser $6 ;获取控件文本状态,这里是指安装目录框的文字,也就是安装路径。
- StrCpy $INSTDIR $6 ;将值赋予常量
- ${GetRoot} "$INSTDIR" $R3 ;获取安装根目录
- StrCpy $R0 "$R3"
- StrCpy $R1 "invalid"
- ${GetDrives} "ALL" "HDDDetection" ;获取将要安装的根目录磁盘类型
- FunctionEnd
-
- Function HDDDetection
- ${if} $R0 == $9 ;$9是盘符;$8是属性
- StrCpy $R1 $8
- ${endif}
- Push $0
- FunctionEnd
-
- ;点击浏览按钮的事件
- Function OnClick_BrowseButton
- Pop $0
- Push $INSTDIR ; input string "C:\Program Files\ProgramName"
- Call GetParent
- Pop $R0 ; first part "C:\Program Files"
-
- Push $INSTDIR ; input string "C:\Program Files\ProgramName"
- Push "" ; input chop char
- Call GetLastPart
- Pop $R1 ; last part "ProgramName"
-
- nsDialogs::SelectFolderDialog "请选择 $R0 安装的文件夹:" "$R0"
- Pop $0
- ${If} $0 == "error" # returns 'error' if 'cancel' was pressed?
- Return
- ${EndIf}
- ${If} $0 != ""
- StrCpy $INSTDIR "$0\$R1"
- system::Call `user32::SetWindowText(i $Txt_Browser, t "$INSTDIR")`
- ${EndIf}
- FunctionEnd
-
- ;得到选中目录用于拼接安装程序名称
- Function GetParent
- Exch $R0 ; input string
- Push $R1
- Push $R2
- Push $R3
- StrCpy $R1 0
- StrLen $R2 $R0
- loop:
- IntOp $R1 $R1 + 1
- IntCmp $R1 $R2 get 0 get
- StrCpy $R3 $R0 1 -$R1
- StrCmp $R3 "" get
- Goto loop
- get:
- StrCpy $R0 $R0 -$R1
- Pop $R3
- Pop $R2
- Pop $R1
- Exch $R0 ; output string
- FunctionEnd
-
- ;截取选中目录
- Function GetLastPart
- Exch $0 ; chop char
- Exch
- Exch $1 ; input string
- Push $2
- Push $3
- StrCpy $2 0
- loop:
- IntOp $2 $2 - 1
- StrCpy $3 $1 1 $2
- StrCmp $3 "" 0 +3
- StrCpy $0 ""
- Goto exit2
- StrCmp $3 $0 exit1
- Goto loop
- exit1:
- IntOp $2 $2 + 1
- StrCpy $0 $1 "" $2
- exit2:
- Pop $3
- Pop $2
- Pop $1
- Exch $0 ; output string
- FunctionEnd
-
- ;跳转前一页面的事件
- Function OnClick_BackPath
- StrCpy $R9 -1 ;Goto the next page
- ;执行下一个页面
- Call RelGotoPage
- Abort
- FunctionEnd
-
- ;执行安装界面的事件
- Function OnClick_Install1
- Call DiskFrameWorkSpaceCheck ;检查磁盘的空间
- StrCpy $R9 1 ;Goto the next page
- ;执行下一个页面
- Call RelGotoPage
- Abort
- FunctionEnd
- #################################安装完成############################################
- ;点击checkBox桌面快捷方式的处理事件
- Function OnClick_CheckDesktopShortCut
- ${IF} $Bool_DesktopShortCut == 1
- IntOp $Bool_DesktopShortCut $Bool_DesktopShortCut - 1
- StrCpy $1 $Ck_DesktopShortCut
- Call SkinBtn_UnChecked
- ;EnableWindow $Btn_Install 0 ;是否显示按钮
- ${ELSE}
- IntOp $Bool_DesktopShortCut $Bool_DesktopShortCut + 1
- StrCpy $1 $Ck_DesktopShortCut
- Call SkinBtn_Checked
- ;EnableWindow $Btn_Install 1
- ${EndIf}
- FunctionEnd
-
- ;点击checkBox桌面任务栏快捷方式的处理事件
- Function OnClick_taskbarpin
- ${IF} $Bool_taskbarpin == 1
- IntOp $Bool_taskbarpin $Bool_taskbarpin - 1
- StrCpy $1 $Ck_taskbarpin
- Call SkinBtn_UnChecked
- ${ELSE}
- IntOp $Bool_taskbarpin $Bool_taskbarpin + 1
- StrCpy $1 $Ck_taskbarpin
- Call SkinBtn_Checked
- ${EndIf}
- FunctionEnd
-
- Function OnClick_Finish
- ;当选择了生成快捷方式的combox的选择框时
- ${If} $Bool_taskbarpin == 1
- ${AndIf} $Bool_DesktopShortCut == 1
- ;生成桌面的快捷方式
- CreateShortCut "$DESKTOP\Electron.lnk" "$INSTDIR\Electron.exe"
- ;生成任务栏的快捷方式
- ExecShell "taskbarpin" "$DESKTOP\Electron.lnk"
- ${ElseIf} $Bool_taskbarpin == 1
- ;生成安装目录的快捷方式
- CreateShortCut "$INSTDIR\Electron.lnk" "$INSTDIR\Electron.exe"
- ;创建任务栏快捷方式
- ExecShell "taskbarpin" "$DESKTOP\Electron.lnk"
- ${ElseIf} $Bool_DesktopShortCut == 1
- ;生成桌面的快捷方式
- CreateShortCut "$DESKTOP\Electron.lnk" "$INSTDIR\Electron.exe"
- ${Else}
- ${EndIf}
- Call onClickClose ;点击关闭响应的事件
- FunctionEnd
-
- ##################################################################################################################
- #########################################自定义的欢迎页面#########################################################
- ##################################################################################################################
-
- ;自定义的欢迎页面 (如果此页面为空,则会调用原来的默认的页面)
- Function WelcomePage
- 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 ;背景设成透明
- ;加入头文件"nsWindows.nsh"
- ${NSW_SetWindowSize} $HWNDPARENT 508 296 ;改变窗体大小
- ${NSW_SetWindowSize} $0 508 296 ;改变Page大小
-
- ;关闭按钮
- ${NSD_CreateButton} 490 5 15 15 ""
- Pop $Btn_Close
- StrCpy $1 $Btn_Close
- Call SkinBtn_Close
- GetFunctionAddress $3 onClose
- SkinBtn::onClick $1 $3
-
- ;立即安装的按钮
- ;${NSD_CreateButton} 240 260 88 25 ""
- ${NSD_CreateButton} 183 225 153 39 ""
- Pop $Btn_Install
- StrCpy $1 $Btn_Install
- Call SkinBtn_Install
- EnableWindow $Btn_Install 1
- ;定义的一个Bool值,用于是否显示
- ;StrCpy $Bool_Install 1
- GetFunctionAddress $3 OnClick_Install
- SkinBtn::onClick $1 $3
-
- ;右下方更改安装路径的控件使用
- ${NSD_CreateButton} 400 280 95 15 ""
- Pop $Btn_LoadPath
- StrCpy $1 $Btn_LoadPath
- Call SkinBtn_Modify
- GetFunctionAddress $3 OnClick_Modify
- SkinBtn::onClick $1 $3
-
- ;CheckBox选中项
- ${NSD_CreateButton} 23 280 15 15 ""
- Pop $Ck_AgreeLicense
- StrCpy $1 $Ck_AgreeLicense
- Call SkinBtn_Checked
- GetFunctionAddress $3 OnClick_CheckAgreeLicense
- SkinBtn::onClick $1 $3
- StrCpy $Bool_AgreeLicense 1
- ${NSD_CreateLabel} 43 280 100 15 "我已阅读并同意"
- Pop $Lbl_AgreeLicense
- SetCtlColors $Lbl_AgreeLicense "" transparent ;背景设成透明
-
- ;checkBox按钮右侧的许可协议按钮,点击这个按钮可以打开html连接,显示网页的效果
- ${NSD_CreateButton} 130 280 100 15 ""
- Pop $Btn_LoadPath
- StrCpy $1 $Btn_LoadPath
- Call SkinBtn_HtmlLicense
- GetFunctionAddress $3 onClickHtmlLicense
- SkinBtn::onClick $1 $3
-
- ;界面的上方图片
- ${NSD_CreateBitmap} 0 0 520 230 ""
- Pop $TopImage
- ${NSD_SetImage} $TopImage $PLUGINSDIR\welcome.bmp $ImageHandle
-
- ;贴背景大图
- ${NSD_CreateBitmap} 0 0 100% 100% ""
- Pop $BGImage
- ${NSD_SetImage} $BGImage $PLUGINSDIR\bg.bmp $ImageHandle
-
- GetFunctionAddress $0 onGUICallback
- WndProc::onCallback $BGImage $0 ;处理无边框窗体移动
- nsDialogs::Show
- ${NSD_FreeImage} $ImageHandle
-
- ;当加上以下的代码后,背景图片以及界面的上方图片显示出来
- GetFunctionAddress $0 onGUICallback
- WndProc::onCallback $BGImage $0 ;处理无边框窗体移动
- nsDialogs::Show
- ;释放背景图片的语句
- ${NSD_FreeImage} $ImageHandle
- FunctionEnd
-
- Function Callback
- ;Call OnCancelInstall
- Pop $R8
- Pop $R9
- System::Int64Op $R8 * 100
- Pop $R0
- System::Int64Op $R0 / $R9
- Pop $R3
- SendMessage $8 ${PBM_SETPOS} $R3 0
- ${NSD_SetText} $9 "已经安装$R3%"
- ${if} $R8 = $R9
- ${NSD_SetText} $9 "安装完成"
- #由于计算方式的四舍五入特性,进度条到安装完成时会有字节级别的误差,此处消除。
- SendMessage $8 ${PBM_SETPOS} 100 0
- System::Call "user32::InvalidateRect(i$hwndparent,i0,i 1)"
- ;MessageBox MB_OK "停止运行程序2!"
- ${endif}
- FunctionEnd
-
- Function .onRebootFailed
- MessageBox MB_OK|MB_ICONSTOP "安装失败,请重新安装。" /SD IDOK
- #当程序运行失败的时候,调用这个方法,删除生成的目录文件
- Call OnCancelInstall
- FunctionEnd
-
- Function OnDialogTimer
- ${NSD_KillTimer} OnDialogTimer
- SendMessage $8 ${PBM_SETRANGE32} 1 100 ;设置区间
- GetFunctionAddress $0 Extractfunc
- ;MessageBox MB_OK "停止运行111111111111111111112!"
- BgWorker::CallAndWait #启动一个低优先级的后台线程
- ;MessageBox MB_OK "停止运行111111111111111111111!"
- FunctionEnd
-
- Function Extractfunc
- SetOutPath $INSTDIR
- MessageBox MB_OK "$INSTDIR"
- /*
- 该命令设置了由 File 命令使用的覆盖标记来决定目标文件已存在时是否覆盖。如果覆盖标记为 on,则目标文件被覆盖 (这个是默认值)。
- 如果覆盖标记为 off,则已存在的文件不会被覆盖。如果覆盖标记为 try,文件仅当可以被覆盖时 (就是说假如文件不能写入,它会自动略过而不需要用户决定) 才会覆盖目标文件。
- 如果覆盖标记为 ifnewer,则仅当已存在的文件比新文件旧时才会覆盖目标文件。如果覆盖标记为 ifdiff,则仅当已存在的文件比新文件旧或新时才会覆盖目标文件。
- 注意在 ifnewer 或 ifdiff 模式下,目标文件的日期都会被设为新文件的日期,而不管 SetDateSave 是怎么设置的。
- */
- SetOverwrite ifnewer
- File "Main.7z"
- GetFunctionAddress $R9 Callback
- MessageBox MB_OK "停止运行111111111111111111113!"
- Nsis7z::ExtractWithCallback "Main.7z" $R9 ;必须使用这一句
- /*
- WriteUninstaller "$INSTDIR\uninst.exe" ;生成卸载exe,自动调用section Uninstall
- WriteRegStr HKLM "$PRODUCT_INSTALL_KEY" "InstallDir" "$INSTDIR"
- WriteRegStr HKLM "$PRODUCT_UNINST_KEY" "Version" "${PRODUCT_VERSION}"
- ;WriteRegStr HKLM "$PRODUCT_INSTALL_KEY" "Version" "$PRODUCT_VERSION_NAME"
- WriteRegStr HKLM "$PRODUCT_UNINST_KEY" "DisplayName" "$(^Name)"
- WriteRegStr HKLM "$PRODUCT_UNINST_KEY" "UninstallString" "$INSTDIR\uninst.exe"
- WriteRegStr HKLM "$PRODUCT_UNINST_KEY" "DisplayIcon" "$INSTDIR\$PRODUCT_NAMEEXE"
- WriteRegStr HKLM "$PRODUCT_UNINST_KEY" "DisplayVersion" "$PRODUCT_VERSION_NAME"
- Delete "$OUTDIR\$PRODUCT_OUTFILE_MAIN7z"
- */
- WriteUninstaller "$INSTDIR\uninst.exe" ;生成卸载exe,自动调用section Uninstall
- WriteRegStr HKLM "${PRODUCT_INSTALL_KEY}" "Version" "${PRODUCT_VERSION}" ; 根键 子键 项 值
-
- ;MessageBox MB_OK "停止运行程序!"
- #跳到下一个界面
- StrCpy $R9 1 ;Goto the next page
- Call RelGotoPage
-
- ;MessageBox MB_OK "停止运行程序1!"
- FunctionEnd
-
- ##################################################################################################################
- #########################################自定义的加载页面#########################################################555555555555555555555555555555555555555555555555555
- ##################################################################################################################
- Function LoadingPage
- 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} $HWNDPARENT 509 330 ;改变自定义窗体大小
- ${NSW_SetWindowSize} $0 509 330 ;改变自定义Page大小
-
- ;创建背景图片的切换动态
- System::Call `*(i,i,i,i)i(1,34,518,200).R0`
- System::Call `user32::MapDialogRect(i$HWNDPARENT,iR0)`
- System::Call `*$R0(i.s,i.s,i.s,i.s)`
- System::Free $R0
- FindWindow $R0 "#32770" "" $HWNDPARENT
- System::Call `user32::CreateWindowEx(i,t"STATIC",in,i${DEFAULT_STYLES}|${SS_BLACKRECT},i1,i34,i518,i200,iR0,i1100,in,in)i.R0`
- StrCpy $WebImg $R0
- MessageBox MB_OK "确定安装?" #因为动态图片加载的过程中需要时间缓冲,因此加上这个进行缓冲处理
- WebCtrl::ShowWebInCtrl $WebImg "$PLUGINSDIR/index.html"
-
- ;创建简要说明
- Pop $0
- ${NSD_CreateLabel} 40 243 100 20 "开始安装..."
- Pop $9
-
- ;进度条的创建
- ${NSD_CreateProgressBar} 24 265 460 20 ""
- SkinProgress::Set $PB_ProgressBar "$PLUGINSDIR\loading2.bmp" "$PLUGINSDIR\loading1.bmp"
- Pop $8
- ${NSD_CreateTimer} OnDialogTimer 100
-
- ;关闭按钮
- ${NSD_CreateButton} 490 5 15 15 ""
- Pop $Btn_LoadingPage_Close
- StrCpy $1 $Btn_LoadingPage_Close
- Call SkinBtn_Close
- EnableWindow $Btn_LoadingPage_Close 0
-
- ;贴背景大图
- ${NSD_CreateBitmap} 0 0 100% 100% ""
- Pop $BGInstallImage
- ${NSD_SetImage} $BGInstallImage $PLUGINSDIR\bg.bmp $ImageHandle
-
- GetFunctionAddress $0 onGUICallback
- WndProc::onCallback $BGInstallImage $0 ;处理无边框窗体移动
- nsDialogs::Show
- ${NSD_FreeImage} $ImageHandle
- FunctionEnd
- ##################################################################################################################
- #########################################自定义的修改路径页面#####################################################
- ##################################################################################################################
- ;修改安装路径的页面
- Function PathPage
- 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} $HWNDPARENT 509 330 ;改变自定义窗体大小
- ${NSW_SetWindowSize} $0 509 330 ;改变自定义Page大小
-
- ;更改目录的文本框
- ${NSD_CreateDirRequest} 35 110 352 23 "$INSTDIR"
- Pop $Txt_Browser
- ${NSD_OnChange} $Txt_Browser OnChange_DirRequest
-
- ;更改目录的按钮
- ${NSD_CreateBrowseButton} 401 110 76 23 ""
- Pop $Btn_Browser
- StrCpy $1 $Btn_Browser
- Call SkinBtn_Browser
- GetFunctionAddress $3 OnClick_BrowseButton
- SkinBtn::onClick $1 $3
-
- ;左下角的返回按钮
- ${NSD_CreateButton} 24 294 95 15 ""
- Pop $Btn_BackPath
- StrCpy $1 $Btn_BackPath
- Call SkinBtn_BackPath
- GetFunctionAddress $3 OnClick_BackPath
- SkinBtn::onClick $1 $3
-
- ;立即安装的按钮 首先判断是否同意安装,若不同意,此处的安装按钮便是灰色的,不可以点击;若同意,直接可以进行点击
- ${NSD_CreateButton} 187 228 153 39 ""
- Pop $Btn_Install
- StrCpy $1 $Btn_Install
- Call SkinBtn_Install
- ${IF} $Bool_AgreeLicense == 0
- EnableWindow $Btn_Install 0 ;否显示按钮
- ${ELSE}
- EnableWindow $Btn_Install1 1
- GetFunctionAddress $3 OnClick_Install1
- SkinBtn::onClick $1 $3
- ${EndIf}
- ;关闭按钮
- ${NSD_CreateButton} 490 5 15 15 ""
- Pop $Btn_PathPage_Close
- StrCpy $1 $Btn_PathPage_Close
- Call SkinBtn_Close
- GetFunctionAddress $3 onClose
- SkinBtn::onClick $1 $3
-
- ;贴背景大图
- ${NSD_CreateBitmap} 0 0 100% 100% ""
- Pop $BGImage
- ${NSD_SetImage} $BGImage $PLUGINSDIR\bg.bmp $ImageHandle
-
- GetFunctionAddress $0 onGUICallback
- WndProc::onCallback $BGImage $0 ;处理无边框窗体移动
- nsDialogs::Show
- ${NSD_FreeImage} $ImageHandle
- FunctionEnd
-
- ##################################################################################################################
- #########################################自定义的安装完成页面#####################################################
- ##################################################################################################################
- Function FinishPage
- 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} $HWNDPARENT 509 330 ;改变自定义窗体大小
- ${NSW_SetWindowSize} $0 509 330 ;改变自定义Page大小
-
- ;关闭按钮
- ${NSD_CreateButton} 490 5 15 15 ""
- Pop $Btn_FinishPage_Close
- StrCpy $1 $Btn_FinishPage_Close
- Call SkinBtn_Close
- EnableWindow $Btn_FinishPage_Close 0
- ;界面的checkBox框(桌面快捷方式,任务栏快捷方式) taskbarpin ShortCut
- ${NSD_CreateButton} 202 120 15 15 ""
- Pop $Ck_DesktopShortCut
- StrCpy $1 $Ck_DesktopShortCut
- Call SkinBtn_Checked
- GetFunctionAddress $3 OnClick_CheckDesktopShortCut
- SkinBtn::onClick $1 $3
- StrCpy $Bool_DesktopShortCut 1
- ${NSD_CreateLabel} 222 120 100 15 "创建桌面快捷方式"
- Pop $Lbl_DesktopShortCut
- SetCtlColors $Lbl_DesktopShortCut "" transparent ;背景设成透明
-
- ${NSD_CreateButton} 202 162 15 15 ""
- Pop $Ck_taskbarpin
- StrCpy $1 $Ck_taskbarpin
- Call SkinBtn_Checked
- GetFunctionAddress $3 OnClick_taskbarpin
- SkinBtn::onClick $1 $3
- StrCpy $Bool_taskbarpin 1
- ${NSD_CreateLabel} 222 162 100 15 "创建任务栏快捷方式"
- Pop $Lbl_taskbarpin
- SetCtlColors $Lbl_taskbarpin "" transparent ;背景设成透明
-
- ;加载界面的完成按钮
- ${NSD_CreateButton} 183 236 150 38 ""
- Pop $Btn_Finish
- StrCpy $1 $Btn_Finish
- Call SkinBtn_Finish
- GetFunctionAddress $3 OnClick_Finish
- SkinBtn::onClick $1 $3
-
- ;贴背景大图
- ${NSD_CreateBitmap} 0 0 100% 100% ""
- Pop $Bg_FinishImage
- ${NSD_SetImage} $Bg_FinishImage $PLUGINSDIR\bg_finish.bmp $ImageHandle
- GetFunctionAddress $0 onGUICallback
- WndProc::onCallback $Bg_FinishImage $0 ;处理无边框窗体移动
- nsDialogs::Show
- ${NSD_FreeImage} $ImageHandle
- FunctionEnd
-
- #当程序运行失败的时候,调用这个方法,删除生成的目录文件
- Function OnCancelInstall
- RMDir "$SMPROGRAMS\pkpm"
- RMDir /r "$INSTDIR"
- ;关闭程序的事件
- MessageBox MB_ICONSTOP "程序安装过程出现意外,请停止安装"
- Call onClose
- FunctionEnd
-
- /******************************
- * 以下是安装程序的卸载部分 *
- ******************************/
-
- Section Uninstall
- ;删除任务栏快捷方式
- ExecShell "taskbarunpin" "$DESKTOP\Electron.lnk"
- ;删除桌面的快捷方式
- Delete "$DESKTOP\Electron.lnk"
- Delete "$INSTDIR\uninst.exe" ; 删除自己
- Delete "$SMPROGRAMS\pkpm\Uninstall.lnk"
- RMDir "$SMPROGRAMS\pkpm"
- ;RMDir "$INSTDIR"
- RMDir /r "$INSTDIR"
- ;DeleteRegKey HKLM "$PRODUCT_UNINST_KEY"
- DeleteRegKey HKLM "${PRODUCT_INSTALL_KEY}"
- SetAutoClose true
- SectionEnd
-
- #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
- Function un.onInit
-
- FindProcDLL::FindProc "Electron.exe"
- Pop $R0
- IntCmp $R0 1 0 no_run
- MessageBox MB_ICONSTOP "安装程序检测到 Electron.exe 正在运行,请退出程序后重试"
- Quit
- no_run:
-
- ;Call IsProgramRunning #检测程序是否正在运行
- MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
- Abort
-
- FunctionEnd
-
- Function un.onUninstSuccess
- HideWindow
- MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"
- FunctionEnd
复制代码
|