ui_laser_setup.nsh 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663
  1. 
  2. !include "StrFunc.nsh"
  3. !include "WordFunc.nsh"
  4. ${StrRep}
  5. ${StrStr}
  6. !include "LogicLib.nsh"
  7. !include "nsDialogs.nsh"
  8. !include "common.nsh"
  9. !include "x64.nsh"
  10. !include "MUI.nsh"
  11. !include "WinVer.nsh"
  12. !include "commonfunc.nsh"
  13. !insertmacro MUI_LANGUAGE "SimpChinese"
  14. VIProductVersion "${PRODUCT_VERSION}"
  15. VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}"
  16. VIAddVersionKey "ProductName" "${PRODUCT_NAME}"
  17. VIAddVersionKey "CompanyName" "${PRODUCT_PUBLISHER}"
  18. VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}"
  19. VIAddVersionKey "InternalName" "${EXE_NAME}"
  20. VIAddVersionKey "FileDescription" "${PRODUCT_NAME}"
  21. VIAddVersionKey "LegalCopyright" "${PRODUCT_LEGAL}"
  22. !define INSTALL_PAGE_CONFIG 0
  23. ;!define INSTALL_PAGE_LICENSE 1
  24. !define INSTALL_PAGE_PROCESSING 1
  25. !define INSTALL_PAGE_FINISH 2
  26. !define INSTALL_PAGE_UNISTCONFIG 3
  27. !define INSTALL_PAGE_UNISTPROCESSING 4
  28. !define INSTALL_PAGE_UNISTFINISH 5
  29. Page custom DUIPage
  30. UninstPage custom un.DUIPage
  31. Var hInstallDlg
  32. Var hInstallSubDlg
  33. Var sCmdFlag
  34. Var sCmdSetupPath
  35. Var sSetupPath
  36. Var sReserveData
  37. Var InstallState
  38. Var UnInstallValue
  39. Var temp11
  40. Var temp12
  41. Var OLD_VER
  42. Var step
  43. ;在安装程序运行前的回调函数前实现
  44. Function .onInit
  45. ${IfNot} ${AtLeastWin10}
  46. MessageBox MB_OK|MB_USERICON '本程序只能安装在windows-10(64位)系统上'
  47. Abort
  48. ${EndIf}
  49. ReadRegStr $OLD_VER HKLM "SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_PATHNAME}" "DisplayVersion"
  50. ${IF} $OLD_VER != ""
  51. ${VersionCompare} $OLD_VER ${PRODUCT_VERSION} $R0
  52. ${If} $R0 == "0"
  53. MessageBox MB_OK|MB_USERICON '${PRODUCT_PATHNAME},版本 $OLD_VER 已安装在计算机中。如需重新安装,请卸载已有的安装'
  54. Quit
  55. ${EndIf}
  56. ${If} $R0 == "1"
  57. MessageBox MB_OK|MB_USERICON '${PRODUCT_PATHNAME},版本 $OLD_VER 已安装在计算机中。如需重新安装,请卸载已有的安装'
  58. ;MessageBox MB_OK|MB_USERICON '${PRODUCT_PATHNAME},您安装的版本是 ${PRODUCT_VERSION} 小于版本 $OLD_VER '
  59. Quit
  60. ${EndIf}
  61. ${If} $R0 == "2"
  62. MessageBox MB_OK|MB_USERICON '${PRODUCT_PATHNAME},版本 $OLD_VER 已安装在计算机中。如需重新安装,请卸载已有的安装'
  63. ;MessageBox MB_OK|MB_USERICON '${PRODUCT_PATHNAME},您安装的版本是 ${PRODUCT_VERSION} 大于版本 $OLD_VER '
  64. Quit
  65. ${EndIf}
  66. ${EndIf}
  67. FunctionEnd
  68. Function DUIPage
  69. StrCpy $InstallState "0"
  70. InitPluginsDir
  71. SetOutPath "$PLUGINSDIR"
  72. File "${INSTALL_LICENCE_FILENAME}"
  73. File "${INSTALL_RES_PATH}"
  74. File /oname=logo.ico "${INSTALL_ICO}" #
  75. nsNiuniuSkin::InitSkinPage "$PLUGINSDIR\" "${INSTALL_LICENCE_FILENAME}"
  76. Pop $hInstallDlg
  77. Call GenerateSetupAddress
  78. nsNiuniuSkin::SetControlAttribute $hInstallDlg "editDir" "text" "$INSTDIR\"
  79. Call OnRichEditTextChange
  80. nsNiuniuSkin::SetWindowTile $hInstallDlg "${PRODUCT_NAME}安装程序"
  81. nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_CONFIG}
  82. nsNiuniuSkin::SetControlAttribute $hInstallDlg "licensename" "text" "《四维深时本地版用户许可协议》"
  83. Call BindUIControls
  84. nsNiuniuSkin::ShowPage 0
  85. FunctionEnd
  86. Function un.DUIPage
  87. StrCpy $InstallState "0"
  88. InitPluginsDir
  89. SetOutPath "$PLUGINSDIR"
  90. File "${INSTALL_RES_PATH}"
  91. File /oname=logo.ico "${UNINSTALL_ICO}"
  92. nsNiuniuSkin::InitSkinPage "$PLUGINSDIR\" ""
  93. Pop $hInstallDlg
  94. nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_UNISTCONFIG}
  95. nsNiuniuSkin::SetWindowTile $hInstallDlg "${PRODUCT_NAME}卸载程序"
  96. nsNiuniuSkin::SetWindowSize $hInstallDlg 480 390s
  97. Call un.BindUnInstUIControls
  98. nsNiuniuSkin::SetControlAttribute $hInstallDlg "chkAutoRun" "selected" "true"
  99. nsNiuniuSkin::ShowPage 0
  100. FunctionEnd
  101. Function un.BindUnInstUIControls
  102. GetFunctionAddress $0 un.ExitDUISetup
  103. nsNiuniuSkin::BindCallBack $hInstallDlg "btnUninstalled" $0
  104. GetFunctionAddress $0 un.onUninstall
  105. nsNiuniuSkin::BindCallBack $hInstallDlg "btnUnInstall" $0
  106. GetFunctionAddress $0 un.ExitDUISetup
  107. nsNiuniuSkin::BindCallBack $hInstallDlg "btnClose" $0
  108. FunctionEnd
  109. Function BindUIControls
  110. GetFunctionAddress $0 OnExitDUISetup
  111. nsNiuniuSkin::BindCallBack $hInstallDlg "btnLicenseClose" $0
  112. GetFunctionAddress $0 OnBtnMin
  113. nsNiuniuSkin::BindCallBack $hInstallDlg "btnLicenseMin" $0
  114. GetFunctionAddress $0 OnBtnLicenseClick
  115. nsNiuniuSkin::BindCallBack $hInstallDlg "btnAgreement" $0
  116. GetFunctionAddress $0 OnExitDUISetup
  117. nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirClose" $0
  118. GetFunctionAddress $0 OnExitDUISetup
  119. nsNiuniuSkin::BindCallBack $hInstallDlg "btnLicenseCancel" $0
  120. GetFunctionAddress $0 OnBtnMin
  121. nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirMin" $0
  122. GetFunctionAddress $0 OnBtnSelectDir
  123. nsNiuniuSkin::BindCallBack $hInstallDlg "btnSelectDir" $0
  124. GetFunctionAddress $0 OnBtnDirPre
  125. nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirPre" $0
  126. GetFunctionAddress $0 OnBtnShowConfig
  127. nsNiuniuSkin::BindCallBack $hInstallDlg "btnAgree" $0
  128. GetFunctionAddress $0 OnBtnCancel
  129. nsNiuniuSkin::BindCallBack $hInstallDlg "btnDirCancel" $0
  130. GetFunctionAddress $0 OnBtnInstall
  131. nsNiuniuSkin::BindCallBack $hInstallDlg "btnInstall" $0
  132. GetFunctionAddress $0 OnExitDUISetup
  133. nsNiuniuSkin::BindCallBack $hInstallDlg "btnDetailClose" $0
  134. GetFunctionAddress $0 OnBtnMin
  135. nsNiuniuSkin::BindCallBack $hInstallDlg "btnDetailMin" $0
  136. GetFunctionAddress $0 OnFinished
  137. nsNiuniuSkin::BindCallBack $hInstallDlg "btnRun" $0
  138. GetFunctionAddress $0 OnBtnMin
  139. nsNiuniuSkin::BindCallBack $hInstallDlg "btnFinishedMin" $0
  140. GetFunctionAddress $0 OnExitDUISetup
  141. nsNiuniuSkin::BindCallBack $hInstallDlg "btnClose" $0
  142. GetFunctionAddress $0 OnCheckLicenseClick
  143. nsNiuniuSkin::BindCallBack $hInstallDlg "chkAgree" $0
  144. GetFunctionAddress $0 OnBtnShowMore
  145. nsNiuniuSkin::BindCallBack $hInstallDlg "btnShowMore" $0
  146. GetFunctionAddress $0 OnBtnHideMore
  147. nsNiuniuSkin::BindCallBack $hInstallDlg "btnHideMore" $0
  148. GetFunctionAddress $0 OnSysCommandCloseEvent
  149. nsNiuniuSkin::BindCallBack $hInstallDlg "syscommandclose" $0
  150. GetFunctionAddress $0 OnRichEditTextChange
  151. nsNiuniuSkin::BindCallBack $hInstallDlg "editDir" $0
  152. FunctionEnd
  153. Function OnRichEditTextChange
  154. nsNiuniuSkin::GetControlAttribute $hInstallDlg "editDir" "text"
  155. Pop $0
  156. StrCpy $INSTDIR "$0"
  157. Call onVerifyInstDir
  158. Pop $0
  159. ${If} $0 == 1
  160. nsNiuniuSkin::SetControlAttribute $hInstallDlg "local_space" "text" "不能包含中文路径"
  161. nsNiuniuSkin::SetControlAttribute $hInstallDlg "local_space" "textcolor" "#ffff0000"
  162. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "false"
  163. goto TextChangeAbort
  164. ${EndIf}
  165. Call IsSetupPathIlleagal
  166. ${If} $R5 == "0"
  167. nsNiuniuSkin::SetControlAttribute $hInstallDlg "local_space" "text" "路径非法"
  168. nsNiuniuSkin::SetControlAttribute $hInstallDlg "local_space" "textcolor" "#ffff0000"
  169. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "false"
  170. goto TextChangeAbort
  171. ${EndIf}
  172. nsNiuniuSkin::SetControlAttribute $hInstallDlg "local_space" "textcolor" "#FF999999"
  173. ${If} $R0 > 1024
  174. IntOp $R1 $R0 % 1024
  175. IntOp $R0 $R0 / 1024;
  176. nsNiuniuSkin::SetControlAttribute $hInstallDlg "local_space" "text" "剩余空间:$R0.$R1GB"
  177. ${Else}
  178. nsNiuniuSkin::SetControlAttribute $hInstallDlg "local_space" "text" "剩余空间:$R0.$R1MB"
  179. ${endif}
  180. nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkAgree" "selected"
  181. Pop $0
  182. ${If} $0 == "1"
  183. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "true"
  184. ${Else}
  185. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "false"
  186. ${EndIf}
  187. TextChangeAbort:
  188. FunctionEnd
  189. Function OnCheckLicenseClick
  190. nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkAgree" "selected"
  191. Pop $0
  192. ${If} $0 == "0"
  193. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "true"
  194. ${Else}
  195. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnInstall" "enabled" "false"
  196. ${EndIf}
  197. FunctionEnd
  198. Function OnBtnLicenseClick
  199. ;nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_LICENSE}
  200. nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "visible" "true"
  201. nsNiuniuSkin::GetControlAttribute $hInstallDlg "moreconfiginfo" "visible"
  202. Pop $0
  203. ${If} $0 = 0
  204. ;pos="10,35,560,405"
  205. nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "pos" "5,35,475,385"
  206. nsNiuniuSkin::SetControlAttribute $hInstallDlg "editLicense" "height" "270"
  207. ${Else}
  208. nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "pos" "5,35,475,495"
  209. nsNiuniuSkin::SetControlAttribute $hInstallDlg "editLicense" "height" "375"
  210. ${EndIf}
  211. FunctionEnd
  212. Section "silentInstallSec" SEC01
  213. #MessageBox MB_OK|MB_ICONINFORMATION "Test silent install. you can add your silent install code here."
  214. SectionEnd
  215. Function ShowMsgBox
  216. nsNiuniuSkin::InitSkinSubPage "msgBox.xml" "btnOK" "btnCancel,btnClose"
  217. Pop $hInstallSubDlg
  218. nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblTitle" "text" "提示"
  219. nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblMsg" "text" "$R8"
  220. ${If} "$R7" == "1"
  221. nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "hlCancel" "visible" "true"
  222. ${EndIf}
  223. nsNiuniuSkin::ShowSkinSubPage 0
  224. FunctionEnd
  225. Function OnBtnInstall
  226. nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkAgree" "selected"
  227. Pop $0
  228. StrCpy $0 "1"
  229. StrCmp $0 "0" InstallAbort 0
  230. nsProcess::_FindProcess "${EXE_NAME}"
  231. Pop $R0
  232. ${If} $R0 == 0
  233. StrCpy $R8 "${PRODUCT_NAME} 正在运行,请退出后重试!"
  234. StrCpy $R7 "0"
  235. Call ShowMsgBox
  236. goto InstallAbort
  237. ${EndIf}
  238. nsNiuniuSkin::GetControlAttribute $hInstallDlg "editDir" "text"
  239. Pop $0
  240. StrCmp $0 "" InstallAbort 0
  241. Call AdjustInstallPath
  242. StrCpy $sSetupPath "$INSTDIR"
  243. Call IsSetupPathIlleagal
  244. ${If} $R5 == "0"
  245. StrCpy $R8 "路径非法,请使用正确的路径安装!"
  246. StrCpy $R7 "0"
  247. Call ShowMsgBox
  248. goto InstallAbort
  249. ${EndIf}
  250. ${If} $R5 == "-1"
  251. StrCpy $R8 "目标磁盘空间不足,请使用其他的磁盘安装!"
  252. StrCpy $R7 "0"
  253. Call ShowMsgBox
  254. goto InstallAbort
  255. ${EndIf}
  256. nsNiuniuSkin::SetWindowSize $hInstallDlg 480 390
  257. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "false"
  258. nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_PROCESSING}
  259. nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "min" "0"
  260. nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "max" "100"
  261. #Call BakFiles
  262. GetFunctionAddress $0 ExtractFunc
  263. BgWorker::CallAndWait
  264. nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkShotcut" "selected"
  265. #Pop $R0
  266. # ${If} $R0 == "1"
  267. # SetShellVarContext all
  268. # CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${EXE_NAME}"
  269. # SetShellVarContext current
  270. # ${EndIf}
  271. SetShellVarContext all
  272. CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${EXE_NAME}"
  273. SetShellVarContext current
  274. Call CreateAppShortcut
  275. Call CreateUninstall
  276. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "true"
  277. StrCpy $InstallState "1"
  278. #Call OnFinished
  279. Call OnEnvInstall
  280. nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_FINISH}
  281. InstallAbort:
  282. FunctionEnd
  283. Function ExtractCallback
  284. Pop $1
  285. Pop $2
  286. System::Int64Op $1 * 100
  287. Pop $3
  288. System::Int64Op $3 / $2
  289. Pop $0
  290. nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "value" "$0"
  291. nsNiuniuSkin::SetControlAttribute $hInstallDlg "progress_pos" "text" "$0%"
  292. ${If} $1 == $2
  293. nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "value" "100"
  294. nsNiuniuSkin::SetControlAttribute $hInstallDlg "progress_pos" "text" "100%"
  295. ${EndIf}
  296. FunctionEnd
  297. Function OnSysCommandCloseEvent
  298. Call OnExitDUISetup
  299. FunctionEnd
  300. Function OnExitDUISetup
  301. ${If} $InstallState == "0"
  302. StrCpy $R8 "安装尚未完成,您确定退出安装么?"
  303. StrCpy $R7 "1"
  304. Call ShowMsgBox
  305. pop $0
  306. ${If} $0 == 0
  307. goto endfun
  308. ${EndIf}
  309. ${EndIf}
  310. nsNiuniuSkin::ExitDUISetup
  311. endfun:
  312. FunctionEnd
  313. Function OnBtnMin
  314. SendMessage $hInstallDlg ${WM_SYSCOMMAND} 0xF020 0
  315. FunctionEnd
  316. Function OnBtnCancel
  317. nsNiuniuSkin::ExitDUISetup
  318. FunctionEnd
  319. Function OnEnvInstall
  320. #2、nsExec::Exec "$INSTDIR\nsis.bat"
  321. nsExec::Exec "$INSTDIR\env_install.bat"
  322. FunctionEnd
  323. Function OnFinished
  324. #MessageBox MB_YESNO|MB_ICONQUESTION "需要重启系统才能完成安装" IDNO +2
  325. #Reboot
  326. #Exec "$INSTDIR\${EXE_NAME}"
  327. Call OnExitDUISetup
  328. FunctionEnd
  329. Function OnBtnSelectDir
  330. nsNiuniuSkin::SelectInstallDirEx $hInstallDlg "请选择安装路径"
  331. Pop $0
  332. ${Unless} "$0" == ""
  333. nsNiuniuSkin::SetControlAttribute $hInstallDlg "editDir" "text" $0
  334. ${EndUnless}
  335. FunctionEnd
  336. Function StepHeightSizeAsc
  337. ${ForEach} $R0 390 500 + 10
  338. nsNiuniuSkin::SetWindowSize $hInstallDlg 480 $R0
  339. Sleep 5
  340. ${Next}
  341. FunctionEnd
  342. Function StepHeightSizeDsc
  343. ${ForEach} $R0 480 390 - 10
  344. nsNiuniuSkin::SetWindowSize $hInstallDlg 480 $R0
  345. Sleep 5
  346. ${Next}
  347. FunctionEnd
  348. Function OnBtnShowMore
  349. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "enabled" "false"
  350. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "enabled" "false"
  351. nsNiuniuSkin::SetControlAttribute $hInstallDlg "moreconfiginfo" "visible" "true"
  352. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "visible" "true"
  353. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "visible" "false"
  354. GetFunctionAddress $0 StepHeightSizeAsc
  355. BgWorker::CallAndWait
  356. nsNiuniuSkin::SetWindowSize $hInstallDlg 480 500
  357. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "enabled" "true"
  358. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "enabled" "true"
  359. FunctionEnd
  360. Function OnBtnHideMore
  361. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "enabled" "false"
  362. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "enabled" "false"
  363. nsNiuniuSkin::SetControlAttribute $hInstallDlg "moreconfiginfo" "visible" "false"
  364. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "visible" "false"
  365. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "visible" "true"
  366. GetFunctionAddress $0 StepHeightSizeDsc
  367. BgWorker::CallAndWait
  368. nsNiuniuSkin::SetWindowSize $hInstallDlg 480 390
  369. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnShowMore" "enabled" "true"
  370. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnHideMore" "enabled" "true"
  371. FunctionEnd
  372. Function OnBtnShowConfig
  373. ;nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_CONFIG}
  374. nsNiuniuSkin::SetControlAttribute $hInstallDlg "licenseshow" "visible" "false"
  375. FunctionEnd
  376. Function OnBtnDirPre
  377. StrCpy $R8 "安装尚未完成,您确定退出安装么?"
  378. StrCpy $R7 "0"
  379. Call ShowMsgBox
  380. ;nsNiuniuSkin::PrePage "wizardTab"
  381. FunctionEnd
  382. Function un.ShowMsgBox
  383. nsNiuniuSkin::InitSkinSubPage "msgBox.xml" "btnOK" "btnCancel,btnClose"
  384. Pop $hInstallSubDlg
  385. nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblTitle" "text" "提示"
  386. nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "lblMsg" "text" "$R8"
  387. ${If} "$R7" == "1"
  388. nsNiuniuSkin::SetControlAttribute $hInstallSubDlg "hlCancel" "visible" "true"
  389. ${EndIf}
  390. nsNiuniuSkin::ShowSkinSubPage 0
  391. FunctionEnd
  392. Function un.ExitDUISetup
  393. nsNiuniuSkin::ExitDUISetup
  394. FunctionEnd
  395. Section "un.silentInstallSec" SEC02
  396. #MessageBox MB_OK|MB_ICONINFORMATION "Test silent install. you can add your silent uninstall code here."
  397. SectionEnd
  398. Function un.onUninstall
  399. nsProcess::_FindProcess "${EXE_NAME}"
  400. Pop $R0
  401. ${If} $R0 == 0
  402. StrCpy $R8 "${PRODUCT_NAME} 正在运行,请退出后重试!"
  403. StrCpy $R7 "0"
  404. Call un.ShowMsgBox
  405. goto InstallAbort
  406. ${EndIf}
  407. nsNiuniuSkin::GetControlAttribute $hInstallDlg "chkbox_userdata" "selected"
  408. Pop $0
  409. StrCpy $sReserveData $0
  410. ${If} $sReserveData == 1
  411. CreateDirectory $INSTDIR\USER_DATA
  412. ${EndIf}
  413. nsExec::Exec "$INSTDIR\uninstall.bat"
  414. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "false"
  415. nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_UNISTPROCESSING}
  416. nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "min" "0"
  417. nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "max" "100"
  418. IntOp $UnInstallValue 0 + 1
  419. Call un.DeleteShotcutAndInstallInfo
  420. IntOp $UnInstallValue $UnInstallValue + 8
  421. GetFunctionAddress $0 un.RemoveFiles
  422. BgWorker::CallAndWait
  423. InstallAbort:
  424. FunctionEnd
  425. Function un.RemoveFiles
  426. ${Locate} "$INSTDIR" "/G=0 /M=*.*" "un.onDeleteFileFound"
  427. StrCpy $InstallState "1"
  428. nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "true"
  429. nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "value" "100"
  430. nsNiuniuSkin::ShowPageItem $hInstallDlg "wizardTab" ${INSTALL_PAGE_UNISTFINISH}
  431. FunctionEnd
  432. Function un.onDeleteFileFound
  433. ; $R9 "path\name"
  434. ; $R8 "path"
  435. ; $R7 "name"
  436. ; $R6 "size" ($R6 = "" if directory, $R6 = "0" if file with /S=)
  437. ${If} $sReserveData == 0
  438. Delete "$R9"
  439. RMDir /r "$R9"
  440. RMDir "$R9"
  441. ${EndIf}
  442. ${If} $sReserveData == 1
  443. RMDir /r /REBOOTOK "$R8\bin"
  444. RMDir /r /REBOOTOK "$R8\4DKK_CGAII"
  445. RMDir /r /REBOOTOK "$R8\mongodb"
  446. RMDir /r /REBOOTOK "$R8\mysql"
  447. RMDir /r /REBOOTOK "$R8\redis"
  448. RMDir /r /REBOOTOK "$R8\jdk1.8"
  449. Delete "$R8\reInstall.bat"
  450. ${EndIf}
  451. IntOp $UnInstallValue $UnInstallValue + 2
  452. ${If} $UnInstallValue > 100
  453. IntOp $UnInstallValue 100 + 0
  454. nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "value" "100"
  455. ${Else}
  456. nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrUnInstProgress" "value" "$UnInstallValue"
  457. nsNiuniuSkin::SetControlAttribute $hInstallDlg "un_progress_pos" "text" "$UnInstallValue%"
  458. #Sleep 100
  459. ${EndIf}
  460. undelete:
  461. Push "LocateNext"
  462. FunctionEnd
  463. #
  464. # 以 Unicode 字符串的方式进行判断 (与 NSIS 是 ANSI/Unicode 无关)
  465. # 但建议 Unicode 版本优先使用此函数。
  466. #
  467. Function PathIsDBCS_W
  468. Exch $R0
  469. Push $R1
  470. Push $R2
  471. Push $R3
  472. System::Call "*(&w${NSIS_MAX_STRLEN}R0)p.R1"
  473. StrCpy $R0 0
  474. StrCpy $R2 $R1
  475. lbl_loop:
  476. # Unicode 版取 2 个字节长度的字符,字符串遇到 0 字符表示结束了。
  477. System::Call "*$R2(&i2.R3)"
  478. IntCmp $R3 0 lbl_done
  479. # Unicode 字符直接判断字符值,大于 128 的我们就视为非英文字符。
  480. IntCmp $R3 128 0 lbl_skip
  481. IntOp $R0 $R0 !
  482. Goto lbl_done
  483. lbl_skip:
  484. # 如果用 NSIS 3.x 这里可以用 IntPtrOp 代替。
  485. IntOp $R2 $R2 + 2
  486. Goto lbl_loop
  487. lbl_done:
  488. System::Free $R1
  489. Pop $R3
  490. Pop $R2
  491. Pop $R1
  492. Exch $R0
  493. FunctionEnd
  494. #
  495. # 以 ANSI 字符串的方式进行判断 (与 NSIS 是 ANSI/Unicode 无关)
  496. # 但建议 ANSI 版本优先使用此函数。
  497. #
  498. Function PathIsDBCS_A
  499. Exch $R0
  500. Push $R1
  501. Push $R2
  502. Push $R3
  503. Push $R4
  504. System::Call "*(&m${NSIS_MAX_STRLEN}R0)p.R1"
  505. StrCpy $R0 0
  506. StrCpy $R2 $R1
  507. lbl_loop:
  508. # ANSI 版取 1 个字节长度的字符,字符串遇到 0 字符表示结束了。
  509. System::Call "*$R2(&i1.R3)"
  510. IntCmp $R3 0 lbl_done
  511. # ANSI 字符用 IsDBCSLeadByte 判断是否双字节字符的前导字节。
  512. System::Call "kernel32::IsDBCSLeadByte(iR3)i.R4"
  513. IntCmp $R4 0 lbl_skip
  514. IntOp $R0 $R0 !
  515. Goto lbl_done
  516. lbl_skip:
  517. # 用 CharNextA 得到下一个字符的地址 (可正确处理双字节字符)。
  518. System::Call "user32::CharNextA(pR2)p.R2"
  519. Goto lbl_loop
  520. lbl_done:
  521. Pop $R4
  522. Pop $R3
  523. Pop $R2
  524. Pop $R1
  525. Exch $R0
  526. FunctionEnd
  527. #
  528. # 当选择的安装路径变更时,路径为空或包含双字节字符 (不限于简体中文),都不允许继续。
  529. # 路径为空时,NSIS 会自行判断。
  530. #
  531. # 此示例未判断是否包含空格。如有需要,请与示例一配合使用。
  532. #
  533. Function onVerifyInstDir
  534. # 检查安装路径是否包含双字节字符 (不限于简体中文)。
  535. Push $INSTDIR
  536. # 这里也可以换成 PathIsDBCS_A 以测试效果。
  537. Call PathIsDBCS_A
  538. Pop $R0
  539. Push $R0
  540. lbl_done:
  541. FunctionEnd