123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659 |
-
- # ===================== 外部插件以及宏 =============================
- !include "StrFunc.nsh"
- !include "WordFunc.nsh"
- !include "LogicLib.nsh"
- !include "nsDialogs.nsh"
- !include "x64.nsh"
- !include "MUI2.nsh"
- !include "WinVer.nsh"
- !include "FileFunc.nsh"
- !include "stdutils.nsh"
- !include "commonfunc.nsh"
- ;Languages
- !insertmacro MUI_LANGUAGE "SimpChinese"
- # ===================== 安装包版本 =============================
- VIProductVersion "${PRODUCT_VERSION}"
- VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}"
- VIAddVersionKey "ProductName" "${PRODUCT_NAME}"
- VIAddVersionKey "CompanyName" "${PRODUCT_PUBLISHER}"
- VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}"
- VIAddVersionKey "InternalName" "${EXE_NAME}"
- VIAddVersionKey "FileDescription" "${PRODUCT_NAME}"
- VIAddVersionKey "LegalCopyright" "${PRODUCT_LEGAL}"
- !define INSTALL_PAGE_CONFIG 0
- !define INSTALL_PAGE_PROCESSING 1
- !define INSTALL_PAGE_FINISH 2
- !define INSTALL_PAGE_UNISTCONFIG 3
- !define INSTALL_PAGE_UNISTPROCESSING 4
- !define INSTALL_PAGE_UNISTFINISH 5
- Function .onInit
- ;创建互斥防止重复运行
- System::Call 'kernel32::CreateMutexA(i 0, i 0, t "ACEUIInstall") i .r1 ?e'
- Pop $R0
- StrCmp $R0 0 +3
- MessageBox MB_OK "有一个 ${PRODUCT_NAME} 安装向导已经运行!"
- Abort
- Call sendStatistics
- FunctionEnd
- # 自定义页面
- Page custom DUIPage
- # 卸载程序显示进度
- UninstPage custom un.DUIPage
- # ======================= DUILIB 自定义页面 =========================
- Var hInstallDlg
- Var hInstallSubDlg
- Var sSetupPath
- Var sReserveData #卸载时是否保留数据
- Var InstallState #是在安装中还是安装完成
- Var UnInstallValue #卸载的进度
- Var isPreference
- Function DUIPage
- StrCpy $InstallState "0" #设置未安装完成状态
- InitPluginsDir
- SetOutPath "$PLUGINSDIR"
- File "${INSTALL_LICENCE_FILENAME}"
- File "${INSTALL_RES_PATH}"
- File /oname=logo.ico "${INSTALL_ICO}" #此处的目标文件一定是logo.ico,否则控件将找不到文件
- nsNiuniuSkin::InitSkinPage "$PLUGINSDIR\" "${INSTALL_LICENCE_FILENAME}" #指定插件路径及协议文件名称
- Pop $hInstallDlg
-
- #生成安装路径,包含识别旧的安装路径
- Call GenerateSetupAddress
-
- #设置控件显示安装路径
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "editDir" "text" "$INSTDIR\"
-
- #设置安装包的标题及任务栏显示
- nsNiuniuSkin::SetWindowTile $hInstallDlg "${PRODUCT_NAME}安装程序"
- nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_CONFIG}
-
- Call BindUIControls
- nsNiuniuSkin::ShowPage 0
- FunctionEnd
- #绑定安装的界面事件
- Function BindUIControls
- # License页面
- GetFunctionAddress $0 OnBtnShowConfig
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnAgree" $0
-
- GetFunctionAddress $0 OnBtnLicenseClick
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnAgreement" $0
-
- # 目录选择 页面
- GetFunctionAddress $0 OnExitDUISetup
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirClose" $0
-
- GetFunctionAddress $0 OnExitDUISetup
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnLicenseCancel" $0
-
- GetFunctionAddress $0 OnBtnMin
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirMin" $0
-
- GetFunctionAddress $0 OnBtnSelectDir
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnSelectDir" $0
-
- GetFunctionAddress $0 OnBtnDirPre
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirPre" $0
-
- GetFunctionAddress $0 OnBtnCancel
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirCancel" $0
-
- GetFunctionAddress $0 OnBtnInstall
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnInstall" $0
-
- # 安装进度 页面
- GetFunctionAddress $0 OnExitDUISetup
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnDetailClose" $0
-
- GetFunctionAddress $0 OnBtnMin
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnDetailMin" $0
- # 安装完成 页面
- GetFunctionAddress $0 OnFinished
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnRun" $0
-
- GetFunctionAddress $0 OnBtnMin
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnFinishedMin" $0
-
- GetFunctionAddress $0 OnExitDUISetup
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnClose" $0
-
- GetFunctionAddress $0 OnCheckLicenseClick
- nsNiuniuSkin::BindCallBack $hInstallDlg "chkAgree" $0
-
- GetFunctionAddress $0 OnBtnShowMore
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnShowMore" $0
-
- GetFunctionAddress $0 OnBtnHideMore
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnHideMore" $0
-
- #绑定窗口通过alt+f4等方式关闭时的通知事件
- GetFunctionAddress $0 OnSysCommandCloseEvent
- nsNiuniuSkin::BindCallBack $hInstallDlg "syscommandclose" $0
-
- #绑定路径变化的通知事件
- GetFunctionAddress $0 OnRichEditTextChange
- nsNiuniuSkin::BindCallBack $hInstallDlg "editDir" $0
-
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "chkShotcut" "text" "生成快捷方式"
- FunctionEnd
- # 开始安装
- Function OnBtnInstall
- #此处检测当前是否同意用户协议
- nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkAgree" "selected"
- Pop $0
- ${If} $0 == "0" #如果未同意,提示
- StrCpy $R8 "请先同意用户许可协议!"
- StrCpy $R7 "0"
- Call ShowMsgBox
- goto InstallAbort
- ${EndIf}
-
- #此处检测当前是否有程序正在运行,如果正在运行,提示先卸载再安装
- nsProcess::_FindProcess "${EXE_NAME}"
- Pop $R0
- ${If} $R0 == 0
- StrCpy $R8 "${PRODUCT_NAME} 正在运行,请退出后重试!"
- StrCpy $R7 "0"
- Call ShowMsgBox
- nsProcess::_KillProcess "${EXE_NAME}"
- goto InstallAbort
- ${EndIf}
-
- nsNiuniuSkin::GetControlAttribute $hInstallDlg "editDir" "text"
- Pop $0
- StrCmp $0 "" InstallAbort 0
-
- #校正路径(追加)
- Call AdjustInstallPath
- StrCpy $sSetupPath "$INSTDIR"
-
- Call IsSetupPathIlleagal
- ${If} $R5 == "0"
- StrCpy $R8 "路径非法,请使用正确的路径安装!"
- StrCpy $R7 "0"
- Call ShowMsgBox
- goto InstallAbort
- ${EndIf}
- ${If} $R5 == "-1"
- StrCpy $R8 "目标磁盘空间不足,请使用其他的磁盘安装!"
- StrCpy $R7 "0"
- Call ShowMsgBox
- goto InstallAbort
- ${EndIf}
-
- nsNiuniuSkin::SetWindowSize $hInstallDlg 570 410
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "false"
- nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_PROCESSING}
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "min" "0"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "max" "100"
- # 下载文件
- Call DownloadApp
-
- #启动一个低优先级的后台线程
- Sleep 200
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "processname" "text" "安装中 ..."
- GetFunctionAddress $0 ExtractFunc
- BgWorker::CallAndWait
-
- #安装统计
- Call sendStatistics
-
- #创建快捷方式 添加到快速启动栏的标志 开机启动
- Call CreateShortcut
-
- Call CreateUninstall
-
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "true"
- StrCpy $InstallState "1"
-
- #如果不想完成立即启动的话,需要屏蔽下面的OnFinished的调用,并且打开显示INSTALL_PAGE_FINISH
- Call OnFinished
- #以下这行如果打开,则是跳转到完成页面
- #nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_FINISH}
- InstallAbort:
- FunctionEnd
- #############################################################
- # 下载安装包
- Function DownloadApp
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "processname" "text" "解压中 ..."
- NSxfer::Request /URL "${APP_DOWNLOAD_URL}" /LOCAL "$INSTDIR\${INSTALL_7Z_NAME}" /TIMEOUTCONNECT 6000 /TIMEOUTRECONNECT 6000 /END
- Pop $3 ; Request ID1
- Call TimerDownloadInfiniteLoop
- NSxfer::Wait /ID $3 /MODE SILENT /END
- NSxfer::Query /ID $3 /ERRORCODE /PERCENT /SPEED /END
- Pop $R0 ; Error code (HTTP status 200-299 for success)
- ${If} $R0 < 200
- ${OrIf} $R0 > 299
- ThreadTimer::Stop
- MessageBox MB_OKCANCEL "$R0 解压出错,请确保网络连接正常,然后再试!" IDOK trueValue IDCANCEL falseValue
- trueValue:
- Call DownloadApp
- Goto next
- falseValue:
- nsNiuniuSkin::ExitDUISetup
- next:
- ${EndIf}
- ThreadTimer::Stop # 下载完成,关闭定时器
- FunctionEnd
- # 定时器,检测下载,显示进度条
- Function TimerDownloadInfiniteLoop
- GetFunctionAddress $2 TryMe
- ThreadTimer::Start 100 -1 $2 ; Timer ticks every 1234 milliseconds, it calls function TryMe in infinite loop until ThreadTimer::Stop is called
- FunctionEnd
- Function TryMe
- NSxfer::Query /ID $3 /ERRORCODE /PERCENT /SPEED /END
- Pop $R0 ; Error code (HTTP status 200-299 for success)
- Pop $R1
- Pop $R2
-
- ${If} $R0 < '299'
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "processname" "text" "解压中 ... $R2"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "value" "$R1"
- ${Else}
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "processname" "text" "解压出错,请重试!err: $R0"
- ${EndIf}
- FunctionEnd
- #############################################################
- Function CreateShortcut
- SetShellVarContext all
- #electron 如果app文件夹存在,则删除,为了避免app,app.asar出现冲突的情况
- #${If} ${FIleExists} "$INSTDIR\resources\app"
- # RMDir /r "$INSTDIR\resources\app"
- #${EndIf}
- CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
- CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\${EXE_NAME}"
- CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\卸载${PRODUCT_NAME}.lnk" "$INSTDIR\uninst.exe"
-
- # 锁定任务栏
- Call createTaskBar
- #根据复选框的值来决定是否添加桌面快捷方式
- nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkShotcut" "selected"
- Pop $R0
- ${If} $R0 == "1"
- Call CreateDeskTopIco
- ${EndIf}
-
- #添加到快速启动栏
- nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkQuickStart" "selected"
- Pop $R0
- ${If} $R0 == "1"
- Call CreateBarlnk
- ${EndIf}
-
- # 开机启动
- nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkAutoRun" "selected"
- Pop $R0
- ${If} $R0 == "1"
- Call CreateBootStart
- ${EndIf}
-
- #刷新关联图标
- Call RefreshShellIcons
- FunctionEnd
- #安装界面点击退出,给出提示
- Function OnExitDUISetup
- ${If} $InstallState == "0"
- StrCpy $R8 "安装尚未完成,您确定退出安装么?"
- StrCpy $R7 "1"
- Call ShowMsgBox
- pop $0
- ${If} $0 == 0
- goto endfun
- ${EndIf}
- ${EndIf}
- nsNiuniuSkin::ExitDUISetup
- endfun:
- FunctionEnd
- Function OnBtnMin
- SendMessage $hInstallDlg ${WM_SYSCOMMAND} 0xF020 0
- FunctionEnd
- Function OnBtnCancel
- nsNiuniuSkin::ExitDUISetup
- FunctionEnd
- Function OnFinished
- #立即启动
- #Exec "$INSTDIR\${EXE_NAME}"
- System::Call 'shell32::ShellExecute(i 0, t"open", t"explorer.exe", t" /e,${EXE_NAME}", t"$INSTDIR\\", i 0)'
- Call OnExitDUISetup
- FunctionEnd
- Function OnBtnDirPre
- FunctionEnd
- Function OnBtnSelectDir
- nsNiuniuSkin::SelectInstallDirEx $hInstallDlg "请选择安装路径"
- Pop $0
- ${Unless} "$0" == ""
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "editDir" "text" $0
- ${EndUnless}
- FunctionEnd
- Function StepHeightSizeAsc
- ${ForEach} $R0 410 500 + 10
- nsNiuniuSkin::SetWindowSize $hInstallDlg 570 $R0
- Sleep 20
- ${Next}
- FunctionEnd
- Function StepHeightSizeDsc
- ${ForEach} $R0 500 410 - 10
- nsNiuniuSkin::SetWindowSize $hInstallDlg 570 $R0
- Sleep 20
- ${Next}
- FunctionEnd
- Function OnBtnShowMore
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "moreconfiginfo" "visible" "true"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "visible" "false"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "visible" "true"
- ;调整窗口高度
- GetFunctionAddress $0 StepHeightSizeAsc
- BgWorker::CallAndWait
-
- nsNiuniuSkin::SetWindowSize $hInstallDlg 570 500
- FunctionEnd
- Function OnBtnHideMore
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "moreconfiginfo" "visible" "false"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "visible" "true"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "visible" "false"
- ;调整窗口高度
- GetFunctionAddress $0 StepHeightSizeDsc
- BgWorker::CallAndWait
- nsNiuniuSkin::SetWindowSize $hInstallDlg 570 410
- FunctionEnd
- Function OnBtnShowConfig
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "visible" "false"
- FunctionEnd
- #根据选中的情况来控制按钮是否灰度显示
- Function OnCheckLicenseClick
- nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkAgree" "selected"
- Pop $0
- ${If} $0 == "0"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "true"
- #${Else}
- # nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "false"
- ${EndIf}
- FunctionEnd
- Function OnBtnLicenseClick
- ;nsNiuniuSkin::ShowPageItem "wizardTab" ${INSTALL_PAGE_LICENSE}
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "visible" "true"
- nsNiuniuSkin::GetControlAttribute $hInstallDlg "moreconfiginfo" "visible"
- Pop $0
- ${If} $0 = 0
- ;pos="10,35,560,405"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "pos" "10,35,560,405"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "editLicense" "height" "295"
- ${Else}
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "pos" "10,35,560,495"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "editLicense" "height" "385"
- ${EndIf}
- FunctionEnd
- #此处是路径变化时的事件通知
- Function OnRichEditTextChange
- #可在此获取路径,判断是否合法等处理
- FunctionEnd
- #CTRL+F4关闭时的事件通知
- Function OnSysCommandCloseEvent
- Call OnExitDUISetup
- FunctionEnd
- Function ExtractCallback
- Pop $1
- Pop $2
- System::Int64Op $1 * 100
- Pop $3
- System::Int64Op $3 / $2
- Pop $0
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "value" "$0"
-
- ${If} $1 == $2
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "value" "100"
- ${EndIf}
- FunctionEnd
- Function ShowMsgBox
- nsNiuniuSkin::InitSkinSubPage "msgBox.xml" "btnOK" "btnCancel,btnClose" ; "提示" "${PRODUCT_NAME} 正在运行,请退出后重试!" 0
- Pop $hInstallSubDlg
- nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblTitle" "text" "提示"
- nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblMsg" "text" "$R8"
- ${If} "$R7" == "1"
- nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "hlCancel" "visible" "true"
- ${EndIf}
-
- nsNiuniuSkin::ShowSkinSubPage 0
- FunctionEnd
- ########################################################
- Function un.onInit
- ;创建互斥防止重复运行
- System::Call 'kernel32::CreateMutexA(i 0, i 0, t "aceuiUnInstall") i .r1 ?e'
- Pop $R0
- StrCmp $R0 0 +3
- MessageBox MB_OK "有一个 ${PRODUCT_NAME} 卸载向导已经运行!"
- Abort
- FunctionEnd
- Function un.DUIPage
- StrCpy $InstallState "0"
- InitPluginsDir
-
- SetOutPath "$PLUGINSDIR"
- File "${INSTALL_RES_PATH}"
- nsNiuniuSkin::InitSkinPage "$PLUGINSDIR\" ""
- Pop $hInstallDlg
- nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_UNISTCONFIG}
-
- #设置安装包的标题及任务栏显示
- nsNiuniuSkin::SetWindowTile $hInstallDlg "${PRODUCT_NAME}卸载程序"
- nsNiuniuSkin::SetWindowSize $hInstallDlg 570 400
- Call un.BindUnInstUIControls
-
- #此处检测当前是否有程序正在运行,如果正在运行,提示先卸载再安装
- nsProcess::_FindProcess "${EXE_NAME}"
- Pop $R0
- ${If} $R0 == 0
- nsProcess::_KillProcess "${EXE_NAME}"
- #StrCpy $R8 "${PRODUCT_NAME} 正在运行,请退出后重试!"
- #StrCpy $R7 "0"
- #Call un.ShowMsgBox
- #nsProcess::_KillProcess "${EXE_NAME}"
- #goto InstallAbort
- ${EndIf}
-
- nsNiuniuSkin::ShowPage 0
- InstallAbort:
- FunctionEnd
- #绑定卸载的事件
- Function un.BindUnInstUIControls
- GetFunctionAddress $0 un.ExitDUIClose
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnUninstalled" $0
-
- GetFunctionAddress $0 un.onUninstall
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnUnInstall" $0
-
- GetFunctionAddress $0 un.ExitDUIClose
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnClose" $0
-
- GetFunctionAddress $0 un.ExitDUISetup
- nsNiuniuSkin::BindCallBack $hInstallDlg "btnBuy" $0
-
- ${If} ${UNINSTALL_url} != ''
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "oneclick_browser" "visible" "false"
- Call un.CheckWebStatus
-
- ${EndIf}
- FunctionEnd
- # 卸载界面显示网页,如果客户没有联网则不显示,联网则显示
- Function un.CheckWebStatus
- NSxfer::Request /URL "${UNINSTALL_url}" /INTERNET_OPTION_CONNECT_TIMEOUT 3000 /LOCAL NONE /MODE SILENT /END
- Pop $0 ;
- NSxfer::Wait /ID $0 /MODE SILENT /END
- NSxfer::Query /ID $0 /ERRORCODE /PERCENT /SPEED /END
- Pop $R0 ; Error code (HTTP status 200-299 for success)
- ${If} $R0 < 200
- ${OrIf} $R0 > 299
- ${Else}
- Sleep 100;
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "oneclick_browser" "visible" "true"
- StrCpy $isPreference "true" #优惠网页显示
- ${EndIf}
- FunctionEnd
- Function un.ExitDUISetup
- ${If} $isPreference == "true"
- # 写入一个日志文件
- LogEx::Init "$TEMP\${INSTALL_APPEND_PATH}"
- Exec "$INSTDIR\${EXE_NAME}"
- ${EndIf}
-
- nsNiuniuSkin::ExitDUISetup
- FunctionEnd
- Function un.ExitDUIClose
- nsNiuniuSkin::ExitDUISetup
- FunctionEnd
- #执行具体的卸载
- Function un.onUninstall
- nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkReserveData" "selected"
- Pop $0
- StrCpy $sReserveData $0
-
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "false"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "lblInstalling" "text" "正在卸载..."
- nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_UNISTPROCESSING}
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "min" "0"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "max" "100"
- IntOp $UnInstallValue 0 + 1
-
- #卸载统计
- Call un.Statistics
-
- Call un.DeleteShotcutAndInstallInfo
-
- IntOp $UnInstallValue $UnInstallValue + 8
-
- #删除文件
- GetFunctionAddress $0 un.RemoveFiles
- BgWorker::CallAndWait
-
- InstallAbort:
- FunctionEnd
- #在线程中删除文件,以便显示进度
- Function un.RemoveFiles
- ${Locate} "$INSTDIR" "/G=0 /M=*.*" "un.onDeleteFileFound"
- StrCpy $InstallState "1"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "true"
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "value" "100"
- nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_UNISTFINISH}
- FunctionEnd
- #卸载程序时删除文件的流程,如果有需要过滤的文件,在此函数中添加
- Function un.onDeleteFileFound
- ; $R9 "path\name"
- ; $R8 "path"
- ; $R7 "name"
- ; $R6 "size" ($R6 = "" if directory, $R6 = "0" if file with /S=)
-
-
- #是否过滤删除
- Delete "$R9"
- RMDir /r "$R9"
- RMDir "$R9"
-
- IntOp $UnInstallValue $UnInstallValue + 2
- ${If} $UnInstallValue > 100
- IntOp $UnInstallValue 100 + 0
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "value" "100"
- ${Else}
- nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "value" "$UnInstallValue"
- Sleep 100
- ${EndIf}
- undelete:
- Push "LocateNext"
- FunctionEnd
- Function un.ShowMsgBox
- nsNiuniuSkin::InitSkinSubPage "msgBox.xml" "btnOK" "btnCancel,btnClose" ; "提示" "${PRODUCT_NAME} 正在运行,请退出后重试!" 0
- Pop $hInstallSubDlg
- nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblTitle" "text" "提示"
- nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblMsg" "text" "$R8"
- ${If} "$R7" == "1"
- nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "hlCancel" "visible" "true"
- ${EndIf}
-
- nsNiuniuSkin::ShowSkinSubPage 0
- FunctionEnd
- ##################################################
- Function sendStatistics
- # 操作系统 x86 x64
- ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PROCESSOR_ARCHITECTURE"
-
- # 操作系统版本序号
- ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" ProductName
- # 操作系统 产品id
- ReadRegStr $2 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "ProductId"
- # 操作系统 系统id
- ReadRegStr $3 HKLM "SOFTWARE\Microsoft\Cryptography" "MachineGuid"
- NSxfer::Transfer /URL "${STATISTICS_url}?type=1&soft_mid=${PRODUCT_MID}&soft_name=${PRODUCT_VERSION}&mac=$3_$2&os_platform=$1&os_arch=$0" /LOCAL NONE /METHOD POST /HEADERS "Content-Type: application/json" /DATA '{"kk":11,"aa":"www"}' /END
- Pop $1 ; Request ID1
- FunctionEnd
- Function un.Statistics
- # 操作系统 x86 x64
- ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PROCESSOR_ARCHITECTURE"
-
- # 操作系统版本序号
- ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" ProductName
- # 操作系统 产品id
- ReadRegStr $2 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "ProductId"
- # 操作系统 系统id
- ReadRegStr $3 HKLM "SOFTWARE\Microsoft\Cryptography" "MachineGuid"
- NSxfer::Transfer /URL "${STATISTICS_url}?type=2&soft_mid=${PRODUCT_MID}&soft_name=${PRODUCT_VERSION}&mac=$3_$2&os_platform=$1&os_arch=$0" /LOCAL NONE /METHOD POST /HEADERS "Content-Type: application/json" /DATA '{"kk":11,"aa":"www"}' /END
- Pop $1 ; Request ID1
- FunctionEnd
|