NSIS.template.in 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
  1. ;ownCloud installer script.
  2. !define APPLICATION_SHORTNAME "@APPLICATION_EXECUTABLE@"
  3. !define APPLICATION_NAME "@APPLICATION_NAME@"
  4. !define APPLICATION_VENDOR "@APPLICATION_VENDOR@"
  5. !define APPLICATION_EXECUTABLE "@APPLICATION_EXECUTABLE@.exe"
  6. !define APPLICATION_DOMAIN "@APPLICATION_DOMAIN@"
  7. !define APPLICATION_LICENSE "@APPLICATION_LICENSE@"
  8. !define WIN_SETUP_BITMAP_PATH "@WIN_SETUP_BITMAP_PATH@"
  9. ;-----------------------------------------------------------------------------
  10. ; Some installer script options (comment-out options not required)
  11. ;-----------------------------------------------------------------------------
  12. !if "@APPLICATION_LICENSE@" != ""
  13. !define OPTION_LICENSE_AGREEMENT
  14. !endif
  15. !define OPTION_UAC_PLUGIN_ENHANCED
  16. !define OPTION_SECTION_SC_START_MENU
  17. !define OPTION_SECTION_SC_DESKTOP
  18. !define OPTION_SECTION_SC_QUICK_LAUNCH
  19. !define OPTION_FINISHPAGE
  20. !define OPTION_FINISHPAGE_LAUNCHER
  21. ; !define OPTION_FINISHPAGE_RELEASE_NOTES
  22. ;-----------------------------------------------------------------------------
  23. ; Some paths.
  24. ;-----------------------------------------------------------------------------
  25. !ifndef MING_PATH
  26. !define MING_PATH "/usr/i686-w64-mingw32/sys-root/mingw"
  27. !endif
  28. !define MING_BIN "${MING_PATH}/bin"
  29. !define MING_LIB "${MING_PATH}/lib"
  30. !define MING_SHARE "${MING_PATH}/share"
  31. !define BUILD_PATH "@CMAKE_BINARY_DIR@"
  32. !define SOURCE_PATH "@CMAKE_SOURCE_DIR@"
  33. !define QT_DLL_PATH "${MING_BIN}"
  34. !define ACCESSIBLE_DLL_PATH "${MING_LIB}/qt4/plugins/accessible"
  35. !define SQLITE_DLL_PATH "${MING_LIB}/qt4/plugins/sqldrivers"
  36. !define IMAGEFORMATS_DLL_PATH "${MING_LIB}/qt4/plugins/imageformats"
  37. !define CSYNC_LIBRARY_DIR "@CSYNC_LIBRARY_DIR@"
  38. !define CSYNC_CONFIG_DIR "@CSYNC_CONFIG_DIR@"
  39. !define NSI_PATH "${source_path}/admin/win/nsi"
  40. ;-----------------------------------------------------------------------------
  41. ; Installer version
  42. ;-----------------------------------------------------------------------------
  43. !define VER_MAJOR "@CPACK_PACKAGE_VERSION_MAJOR@"
  44. !define VER_MINOR "@CPACK_PACKAGE_VERSION_MINOR@"
  45. !define VER_PATCH "@CPACK_PACKAGE_VERSION_PATCH@"
  46. !define VER_BUILD "@CPACK_PACKAGE_VERSION_BUILD@"
  47. !define VERSION "@CPACK_PACKAGE_VERSION@"
  48. ;-----------------------------------------------------------------------------
  49. ; Installer build timestamp.
  50. ;-----------------------------------------------------------------------------
  51. !define /date BUILD_TIME "built on %Y/%m/%d at %I:%M %p"
  52. ;-----------------------------------------------------------------------------
  53. ; Initial installer setup and definitions.
  54. ;-----------------------------------------------------------------------------
  55. Name "@CPACK_NSIS_PACKAGE_NAME@"
  56. BrandingText "${APPLICATION_NAME} ${VERSION} -- ${BUILD_TIME}"
  57. OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@"
  58. InstallDir "$PROGRAMFILES\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
  59. InstallDirRegKey HKCU "Software\${APPLICATION_NAME}" ""
  60. InstType Standard
  61. InstType Full
  62. InstType Minimal
  63. CRCCheck On
  64. SetCompressor @CPACK_NSIS_COMPRESSOR@
  65. RequestExecutionLevel user ;Now using the UAC plugin.
  66. ReserveFile NSIS.InstallOptions.ini
  67. ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
  68. @CPACK_NSIS_SECTION_SELECTED_VARS@
  69. ;-----------------------------------------------------------------------------
  70. ; Include some required header files.
  71. ;-----------------------------------------------------------------------------
  72. !include LogicLib.nsh ;Used by APPDATA uninstaller.
  73. !include nsDialogs.nsh ;Used by APPDATA uninstaller.
  74. !include MUI2.nsh ;Used by APPDATA uninstaller.
  75. !include InstallOptions.nsh ;Required by MUI2 to support old MUI_INSTALLOPTIONS.
  76. !include Memento.nsh ;Remember user selections.
  77. !include WinVer.nsh ;Windows version detection.
  78. !include WordFunc.nsh ;Used by VersionCompare macro function.
  79. !include UAC.nsh ;Used by the UAC elevation to install as user or admin.
  80. ;-----------------------------------------------------------------------------
  81. ; Memento selections stored in registry.
  82. ;-----------------------------------------------------------------------------
  83. !define MEMENTO_REGISTRY_ROOT HKLM
  84. !define MEMENTO_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}"
  85. ;-----------------------------------------------------------------------------
  86. ; Modern User Interface (MUI) defintions and setup.
  87. ;-----------------------------------------------------------------------------
  88. !define MUI_ABORTWARNING
  89. !define MUI_ICON ${NSI_PATH}\installer.ico
  90. !define MUI_UNICON ${NSI_PATH}\installer.ico
  91. !define MUI_WELCOMEFINISHPAGE_BITMAP ${WIN_SETUP_BITMAP_PATH}/welcome.bmp
  92. !define MUI_HEADERIMAGE
  93. !define MUI_HEADERIMAGE_BITMAP ${WIN_SETUP_BITMAP_PATH}/page_header.bmp
  94. !define MUI_COMPONENTSPAGE_SMALLDESC
  95. !define MUI_FINISHPAGE_LINK "www.${APPLICATION_DOMAIN}"
  96. !define MUI_FINISHPAGE_LINK_LOCATION "http://www.${APPLICATION_DOMAIN}"
  97. !define MUI_FINISHPAGE_NOREBOOTSUPPORT
  98. !ifdef OPTION_FINISHPAGE_RELEASE_NOTES
  99. !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
  100. !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\NOTES.txt"
  101. !define MUI_FINISHPAGE_SHOWREADME_TEXT $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING
  102. !endif
  103. !ifdef OPTION_FINISHPAGE_LAUNCHER
  104. !define MUI_FINISHPAGE_NOAUTOCLOSE
  105. !define MUI_FINISHPAGE_RUN
  106. !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication"
  107. !endif
  108. ;-----------------------------------------------------------------------------
  109. ; Page macros.
  110. ;-----------------------------------------------------------------------------
  111. !insertmacro MUI_PAGE_WELCOME
  112. !ifdef OPTION_LICENSE_AGREEMENT
  113. !insertmacro MUI_PAGE_LICENSE "${APPLICATION_LICENSE}"
  114. !endif
  115. Page custom PageReinstall PageLeaveReinstall
  116. !insertmacro MUI_PAGE_COMPONENTS
  117. !insertmacro MUI_PAGE_DIRECTORY
  118. !insertmacro MUI_PAGE_INSTFILES
  119. !ifdef OPTION_FINISHPAGE
  120. !insertmacro MUI_PAGE_FINISH
  121. !endif
  122. !insertmacro MUI_UNPAGE_CONFIRM
  123. UninstPage custom un.UnPageUserAppData un.UnPageUserAppDataLeave
  124. !insertmacro MUI_UNPAGE_INSTFILES
  125. ;-----------------------------------------------------------------------------
  126. ; Other MUI macros.
  127. ;-----------------------------------------------------------------------------
  128. !insertmacro MUI_LANGUAGE "English"
  129. !include ${source_path}/admin/win/nsi/l10n/languages.nsh
  130. !include ${source_path}/admin/win/nsi/l10n/declarations.nsh
  131. ##############################################################################
  132. # #
  133. # FINISH PAGE LAUNCHER FUNCTIONS #
  134. # #
  135. ##############################################################################
  136. Function LaunchApplication
  137. ${UAC.CallFunctionAsUser} LaunchApplicationAsUser
  138. FunctionEnd
  139. Function LaunchApplicationAsUser
  140. Exec "$INSTDIR\${APPLICATION_EXECUTABLE}"
  141. FunctionEnd
  142. ##############################################################################
  143. # #
  144. # PROCESS HANDLING FUNCTIONS AND MACROS #
  145. # #
  146. ##############################################################################
  147. !macro CheckForProcess processName gotoWhenFound gotoWhenNotFound
  148. Processes::FindProcess ${processName}
  149. StrCmp $R0 "0" ${gotoWhenNotFound} ${gotoWhenFound}
  150. !macroend
  151. !macro ConfirmEndProcess processName
  152. MessageBox MB_YESNO|MB_ICONEXCLAMATION \
  153. $ConfirmEndProcess_MESSAGEBOX_TEXT \
  154. IDYES process_${processName}_kill IDNO process_${processName}_ended
  155. process_${processName}_kill:
  156. DetailPrint $ConfirmEndProcess_KILLING_PROCESSES_TEXT
  157. Processes::KillProcess ${processName}
  158. Sleep 1500
  159. StrCmp $R0 "1" process_${processName}_ended
  160. DetailPrint $ConfirmEndProcess_KILL_NOT_FOUND_TEXT
  161. process_${processName}_ended:
  162. !macroend
  163. !macro CheckAndConfirmEndProcess processName
  164. !insertmacro CheckForProcess ${processName} 0 no_process_${processName}_to_end
  165. !insertmacro ConfirmEndProcess ${processName}
  166. no_process_${processName}_to_end:
  167. !macroend
  168. Function EnsureOwncloudShutdown
  169. !insertmacro CheckAndConfirmEndProcess "${APPLICATION_EXECUTABLE}"
  170. FunctionEnd
  171. ##############################################################################
  172. # #
  173. # RE-INSTALLER FUNCTIONS #
  174. # #
  175. ##############################################################################
  176. Function PageReinstall
  177. ReadRegStr $R0 HKLM "Software\${APPLICATION_NAME}" ""
  178. StrCmp $R0 "" 0 +2
  179. Abort
  180. ;Detect version
  181. ReadRegDWORD $R0 HKLM "Software\${APPLICATION_NAME}" "VersionMajor"
  182. IntCmp $R0 ${VER_MAJOR} minor_check new_version older_version
  183. minor_check:
  184. ReadRegDWORD $R0 HKLM "Software\${APPLICATION_NAME}" "VersionMinor"
  185. IntCmp $R0 ${VER_MINOR} rev_check new_version older_version
  186. rev_check:
  187. ReadRegDWORD $R0 HKLM "Software\${APPLICATION_NAME}" "VersionRevision"
  188. IntCmp $R0 ${VER_PATCH} build_check new_version older_version
  189. build_check:
  190. ReadRegDWORD $R0 HKLM "Software\${APPLICATION_NAME}" "VersionBuild"
  191. IntCmp $R0 ${VER_BUILD} same_version new_version older_version
  192. new_version:
  193. !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 1" "Text" $PageReinstall_NEW_Field_1
  194. !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 2" "Text" $PageReinstall_NEW_Field_2
  195. !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 3" "Text" $PageReinstall_NEW_Field_3
  196. !insertmacro MUI_HEADER_TEXT $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE
  197. StrCpy $R0 "1"
  198. Goto reinst_start
  199. older_version:
  200. !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 1" "Text" $PageReinstall_OLD_Field_1
  201. !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 2" "Text" $PageReinstall_NEW_Field_2
  202. !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 3" "Text" $PageReinstall_NEW_Field_3
  203. !insertmacro MUI_HEADER_TEXT $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE
  204. StrCpy $R0 "1"
  205. Goto reinst_start
  206. same_version:
  207. !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 1" "Text" $PageReinstall_SAME_Field_1
  208. !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 2" "Text" $PageReinstall_SAME_Field_2
  209. !insertmacro INSTALLOPTIONS_WRITE "NSIS.InstallOptions.ini" "Field 3" "Text" $PageReinstall_SAME_Field_3
  210. !insertmacro MUI_HEADER_TEXT $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE
  211. StrCpy $R0 "2"
  212. reinst_start:
  213. !insertmacro INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini"
  214. FunctionEnd
  215. Function PageLeaveReinstall
  216. !insertmacro INSTALLOPTIONS_READ $R1 "NSIS.InstallOptions.ini" "Field 2" "State"
  217. StrCmp $R0 "1" 0 +2
  218. StrCmp $R1 "1" reinst_uninstall reinst_done
  219. StrCmp $R0 "2" 0 +3
  220. StrCmp $R1 "1" reinst_done reinst_uninstall
  221. reinst_uninstall:
  222. ReadRegStr $R1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "UninstallString"
  223. HideWindow
  224. ClearErrors
  225. ExecWait '$R1 _?=$INSTDIR'
  226. IfErrors no_remove_uninstaller
  227. IfFileExists "$INSTDIR\${APPLICATION_EXECUTABLE}" no_remove_uninstaller
  228. Delete $R1
  229. RMDir $INSTDIR
  230. no_remove_uninstaller:
  231. StrCmp $R0 "2" 0 +3
  232. UAC::Unload
  233. Quit
  234. BringToFront
  235. reinst_done:
  236. FunctionEnd
  237. ##############################################################################
  238. # #
  239. # INSTALLER SECTIONS #
  240. # #
  241. ##############################################################################
  242. Section "${APPLICATION_NAME}" SEC_APPLICATION
  243. SectionIn 1 2 3 RO
  244. SetDetailsPrint listonly
  245. SetDetailsPrint textonly
  246. DetailPrint $SEC_APPLICATION_DETAILS
  247. SetDetailsPrint listonly
  248. SetOutPath "$INSTDIR"
  249. !ifdef INSTALL_PATH
  250. ;Main executable.
  251. File "${INSTALL_PATH}\bin\${APPLICATION_EXECUTABLE}"
  252. !endif
  253. !ifndef INSTALL_PATH
  254. ;Main executable.
  255. File "${BUILD_PATH}\bin\${APPLICATION_EXECUTABLE}"
  256. File "${BUILD_PATH}\src\lib${APPLICATION_SHORTNAME}sync.dll"
  257. File "${BUILD_PATH}\src\mirall_*.qm"
  258. ; Make sure only to copy qt, not qt_help, etc
  259. File "${MING_SHARE}\qt4\translations\qt_??.qm"
  260. File "${MING_SHARE}\qt4\translations\qt_??_??.qm"
  261. File "${MING_SHARE}\qt4\translations\qtkeychain_*.qm"
  262. SetOutPath "$INSTDIR\accessible"
  263. File "${ACCESSIBLE_DLL_PATH}\qtaccessiblewidgets4.dll"
  264. SetOutPath "$INSTDIR\imageformats"
  265. File "${IMAGEFORMATS_DLL_PATH}\qgif4.dll"
  266. File "${IMAGEFORMATS_DLL_PATH}\qjpeg4.dll"
  267. File "${IMAGEFORMATS_DLL_PATH}\qico4.dll"
  268. SetOutPath "$INSTDIR\sqldrivers"
  269. File "${SQLITE_DLL_PATH}\qsqlite4.dll"
  270. SetOutPath "$INSTDIR"
  271. !endif
  272. ;License & release notes.
  273. File "@CPACK_RESOURCE_FILE_LICENSE@"
  274. ;File /oname=NOTES.txt ${NSI_PATH}\RELEASE_NOTES.txt
  275. ;QT stuff:
  276. File "${QT_DLL_PATH}\QtCore4.dll"
  277. File "${QT_DLL_PATH}\QtGui4.dll"
  278. File "${QT_DLL_PATH}\QtNetwork4.dll"
  279. File "${QT_DLL_PATH}\QtSql4.dll"
  280. File "${QT_DLL_PATH}\QtXml4.dll"
  281. File "${QT_DLL_PATH}\QtWebKit4.dll"
  282. ;QtKeyChain stuff
  283. File "${MING_BIN}\libqtkeychain.dll"
  284. File "${CSYNC_LIBRARY_DIR}\libocsync.dll"
  285. File "${MING_BIN}\libsqlite3-0.dll"
  286. File "${MING_BIN}\libpng15-15.dll"
  287. ; ownCloud plugin
  288. File "${MING_BIN}\libintl-8.dll"
  289. File "${MING_BIN}\libneon-27.dll"
  290. File "${MING_BIN}\libproxy.dll"
  291. File "${MING_BIN}\libmodman.dll"
  292. File "${MING_BIN}\libxml2-2.dll"
  293. ;MinGW stuff
  294. File "${MING_BIN}\libgcc_s_sjlj-1.dll"
  295. File "${MING_BIN}\libstdc++-6.dll"
  296. ; Other
  297. ;File "${MING_BIN}\libpng15-15.dll"
  298. File "${MING_BIN}\libjpeg-8.dll"
  299. File "${MING_BIN}\zlib1.dll"
  300. File "${MING_BIN}\libcrypto-10.dll"
  301. File "${MING_BIN}\libssl-10.dll"
  302. ; CSync configs
  303. File "${SOURCE_PATH}/sync-exclude.lst"
  304. SectionEnd
  305. SectionGroup "Shortcuts"
  306. !ifdef OPTION_SECTION_SC_START_MENU
  307. ${MementoSection} $OPTION_SECTION_SC_START_MENU_SECTION SEC_START_MENU
  308. SectionIn 1 2 3
  309. SetDetailsPrint textonly
  310. DetailPrint $OPTION_SECTION_SC_START_MENU_DetailPrint
  311. SetDetailsPrint listonly
  312. SetShellVarContext all
  313. CreateShortCut "$SMPROGRAMS\${APPLICATION_NAME}.lnk" "$INSTDIR\${APPLICATION_EXECUTABLE}"
  314. SetShellVarContext current
  315. ${MementoSectionEnd}
  316. !endif
  317. !ifdef OPTION_SECTION_SC_DESKTOP
  318. ${MementoSection} $OPTION_SECTION_SC_DESKTOP_SECTION SEC_DESKTOP
  319. SectionIn 1 2
  320. SetDetailsPrint textonly
  321. DetailPrint $OPTION_SECTION_SC_DESKTOP_DetailPrint
  322. SetDetailsPrint listonly
  323. CreateShortCut "$DESKTOP\${APPLICATION_NAME}.lnk" "$INSTDIR\${APPLICATION_EXECUTABLE}"
  324. ${MementoSectionEnd}
  325. !endif
  326. !ifdef OPTION_SECTION_SC_QUICK_LAUNCH
  327. ${MementoSection} $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION SEC_QUICK_LAUNCH
  328. SectionIn 1 2
  329. SetDetailsPrint textonly
  330. DetailPrint $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint
  331. SetDetailsPrint listonly
  332. CreateShortCut "$QUICKLAUNCH\${APPLICATION_NAME}.lnk" "$INSTDIR\${APPLICATION_EXECUTABLE}"
  333. ${MementoSectionEnd}
  334. !endif
  335. SectionGroupEnd
  336. ${MementoSectionDone}
  337. ; Installer section descriptions
  338. ;--------------------------------
  339. !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  340. !insertmacro MUI_DESCRIPTION_TEXT ${SEC_APPLICATION} $OPTION_SECTION_SC_APPLICATION_Desc
  341. !insertmacro MUI_DESCRIPTION_TEXT ${SEC_START_MENU} $OPTION_SECTION_SC_START_MENU_Desc
  342. !insertmacro MUI_DESCRIPTION_TEXT ${SEC_DESKTOP} $OPTION_SECTION_SC_DESKTOP_Desc
  343. !insertmacro MUI_DESCRIPTION_TEXT ${SEC_QUICK_LAUNCH} $OPTION_SECTION_SC_QUICK_LAUNCH_Desc
  344. !insertmacro MUI_FUNCTION_DESCRIPTION_END
  345. Section -post
  346. ;Uninstaller file.
  347. SetDetailsPrint textonly
  348. DetailPrint $UNINSTALLER_FILE_Detail
  349. SetDetailsPrint listonly
  350. WriteUninstaller $INSTDIR\uninstall.exe
  351. ;Registry keys required for installer version handling and uninstaller.
  352. SetDetailsPrint textonly
  353. DetailPrint $UNINSTALLER_REGISTRY_Detail
  354. SetDetailsPrint listonly
  355. ;Version numbers used to detect existing installation version for comparisson.
  356. WriteRegStr HKLM "Software\${APPLICATION_NAME}" "" $INSTDIR
  357. WriteRegDWORD HKLM "Software\${APPLICATION_NAME}" "VersionMajor" "${VER_MAJOR}"
  358. WriteRegDWORD HKLM "Software\${APPLICATION_NAME}" "VersionMinor" "${VER_MINOR}"
  359. WriteRegDWORD HKLM "Software\${APPLICATION_NAME}" "VersionRevision" "${VER_PATCH}"
  360. WriteRegDWORD HKLM "Software\${APPLICATION_NAME}" "VersionBuild" "${VER_BUILD}"
  361. ;Add or Remove Programs entry.
  362. WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "UninstallString" '"$INSTDIR\Uninstall.exe"'
  363. WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "InstallLocation" "$INSTDIR"
  364. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "DisplayName" "${APPLICATION_NAME}"
  365. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "Publisher" "${APPLICATION_VENDOR}"
  366. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "DisplayIcon" "$INSTDIR\Uninstall.exe,0"
  367. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "DisplayVersion" "${VERSION}"
  368. WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "VersionMajor" "${VER_MAJOR}"
  369. WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "VersionMinor" "${VER_MINOR}.${REVISION}"
  370. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "URLInfoAbout" "http://${APPLICATION_DOMAIN}/"
  371. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "HelpLink" "http://${APPLICATION_DOMAIN}/"
  372. WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "NoModify" "1"
  373. WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "NoRepair" "1"
  374. SetDetailsPrint textonly
  375. DetailPrint $UNINSTALLER_FINISHED_Detail
  376. SectionEnd
  377. ##############################################################################
  378. # #
  379. # UNINSTALLER SECTION #
  380. # #
  381. ##############################################################################
  382. Var UnPageUserAppDataDialog
  383. Var UnPageUserAppDataCheckbox
  384. Var UnPageUserAppDataCheckbox_State
  385. Var UnPageUserAppDataEditBox
  386. Function un.UnPageUserAppData
  387. !insertmacro MUI_HEADER_TEXT $UNINSTALLER_APPDATA_TITLE $UNINSTALLER_APPDATA_SUBTITLE
  388. nsDialogs::Create /NOUNLOAD 1018
  389. Pop $UnPageUserAppDataDialog
  390. ${If} $UnPageUserAppDataDialog == error
  391. Abort
  392. ${EndIf}
  393. ${NSD_CreateLabel} 0 0 100% 12u $UNINSTALLER_APPDATA_LABEL_1
  394. Pop $0
  395. ${NSD_CreateText} 0 13u 100% 12u "$LOCALAPPDATA\${APPLICATION_NAME}"
  396. Pop $UnPageUserAppDataEditBox
  397. SendMessage $UnPageUserAppDataEditBox ${EM_SETREADONLY} 1 0
  398. ${NSD_CreateLabel} 0 46u 100% 24u $UNINSTALLER_APPDATA_LABEL_2
  399. Pop $0
  400. ${NSD_CreateCheckbox} 0 71u 100% 8u $UNINSTALLER_APPDATA_CHECKBOX
  401. Pop $UnPageUserAppDataCheckbox
  402. nsDialogs::Show
  403. FunctionEnd
  404. Function un.UnPageUserAppDataLeave
  405. ${NSD_GetState} $UnPageUserAppDataCheckbox $UnPageUserAppDataCheckbox_State
  406. FunctionEnd
  407. Function un.EnsureOwncloudShutdown
  408. !insertmacro CheckAndConfirmEndProcess "${APPLICATION_EXECUTABLE}"
  409. FunctionEnd
  410. Section Uninstall
  411. IfFileExists "$INSTDIR\${APPLICATION_EXECUTABLE}" owncloud_installed
  412. MessageBox MB_YESNO $UNINSTALL_MESSAGEBOX IDYES owncloud_installed
  413. Abort $UNINSTALL_ABORT
  414. owncloud_installed:
  415. ;Delete registry keys.
  416. DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}"
  417. DeleteRegValue HKLM "Software\${APPLICATION_NAME}" "VersionBuild"
  418. DeleteRegValue HKLM "Software\${APPLICATION_NAME}" "VersionMajor"
  419. DeleteRegValue HKLM "Software\${APPLICATION_NAME}" "VersionMinor"
  420. DeleteRegValue HKLM "Software\${APPLICATION_NAME}" "VersionRevision"
  421. DeleteRegValue HKLM "Software\${APPLICATION_NAME}" ""
  422. DeleteRegKey HKLM "Software\${APPLICATION_NAME}"
  423. DeleteRegKey HKCR "${APPLICATION_NAME}"
  424. ;Start menu shortcuts.
  425. !ifdef OPTION_SECTION_SC_START_MENU
  426. SetShellVarContext all
  427. Delete "$SMPROGRAMS\${APPLICATION_NAME}.lnk"
  428. SetShellVarContext current
  429. !endif
  430. ;Desktop shortcut.
  431. !ifdef OPTION_SECTION_SC_DESKTOP
  432. IfFileExists "$DESKTOP\${APPLICATION_NAME}.lnk" 0 +2
  433. Delete "$DESKTOP\${APPLICATION_NAME}.lnk"
  434. !endif
  435. ;Quick Launch shortcut.
  436. !ifdef OPTION_SECTION_SC_QUICK_LAUNCH
  437. IfFileExists "$QUICKLAUNCH\${APPLICATION_NAME}.lnk" 0 +2
  438. Delete "$QUICKLAUNCH\${APPLICATION_NAME}.lnk"
  439. !endif
  440. ;Remove all the Program Files.
  441. RMDir /r $INSTDIR
  442. ;Uninstall User Data if option is checked, otherwise skip.
  443. ${If} $UnPageUserAppDataCheckbox_State == ${BST_CHECKED}
  444. RMDir /r "$LOCALAPPDATA\${APPLICATION_NAME}"
  445. ${EndIf}
  446. SetDetailsPrint textonly
  447. DetailPrint $UNINSTALLER_FINISHED_Detail
  448. SectionEnd
  449. ##############################################################################
  450. # #
  451. # NSIS Installer Event Handler Functions #
  452. # #
  453. ##############################################################################
  454. Function .onInit
  455. !insertmacro INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini"
  456. !insertmacro MUI_LANGDLL_DISPLAY
  457. # load the selected language file
  458. StrCmp $LANGUAGE ${LANG_GERMAN} German 0
  459. StrCmp $LANGUAGE ${LANG_DUTCH} Dutch 0
  460. StrCmp $LANGUAGE ${LANG_FINNISH} Finnish 0
  461. StrCmp $LANGUAGE ${LANG_JAPANESE} Japanese 0
  462. StrCmp $LANGUAGE ${LANG_SLOVENIAN} Slovenian 0
  463. StrCmp $LANGUAGE ${LANG_SPANISH} Spanish 0
  464. StrCmp $LANGUAGE ${LANG_ITALIAN} Italian 0
  465. StrCmp $LANGUAGE ${LANG_ESTONIAN} Estonian 0
  466. StrCmp $LANGUAGE ${LANG_GREEK} Greek 0
  467. StrCmp $LANGUAGE ${LANG_GREEK} Basque 0
  468. StrCmp $LANGUAGE ${LANG_GREEK} Galician 0
  469. StrCmp $LANGUAGE ${LANG_GREEK} Slovak 0
  470. StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} Brazilian EndLanguageCmp
  471. German:
  472. !include "${source_path}/admin/win/nsi/l10n\German.nsh"
  473. Goto EndLanguageCmp
  474. Dutch:
  475. !include "${source_path}/admin/win/nsi/l10n\Dutch.nsh"
  476. Goto EndLanguageCmp
  477. Finnish:
  478. !include "${source_path}/admin/win/nsi/l10n\Finnish.nsh"
  479. Goto EndLanguageCmp
  480. Japanese:
  481. !include "${source_path}/admin/win/nsi/l10n\Japanese.nsh"
  482. Goto EndLanguageCmp
  483. Slovenian:
  484. !include "${source_path}/admin/win/nsi/l10n\Slovenian.nsh"
  485. Goto EndLanguageCmp
  486. Spanish:
  487. !include "${source_path}/admin/win/nsi/l10n\Spanish.nsh"
  488. Goto EndLanguageCmp
  489. Italian:
  490. !include "${source_path}/admin/win/nsi/l10n\Italian.nsh"
  491. Goto EndLanguageCmp
  492. Estonian:
  493. !include "${source_path}/admin/win/nsi/l10n\Estonian.nsh"
  494. Goto EndLanguageCmp
  495. Greek:
  496. !include "${source_path}/admin/win/nsi/l10n\Greek.nsh"
  497. Goto EndLanguageCmp
  498. Basque:
  499. !include "${source_path}/admin/win/nsi/l10n\Basque.nsh"
  500. Goto EndLanguageCmp
  501. Galician:
  502. !include "${source_path}/admin/win/nsi/l10n\Galician.nsh"
  503. Goto EndLanguageCmp
  504. Slovak:
  505. !include "${source_path}/admin/win/nsi/l10n\Slovak.nsh"
  506. Goto EndLanguageCmp
  507. Brazilian:
  508. !include "${source_path}/admin/win/nsi/l10n\PortugueseBR.nsh"
  509. EndLanguageCmp:
  510. ;Remove Quick Launch option from Windows 7, as no longer applicable - usually.
  511. ${IfNot} ${AtMostWinVista}
  512. SectionSetText ${SEC_QUICK_LAUNCH} $INIT_NO_QUICK_LAUNCH
  513. SectionSetFlags ${SEC_QUICK_LAUNCH} ${SF_RO}
  514. SectionSetInstTypes ${SEC_QUICK_LAUNCH} 0
  515. ${EndIf}
  516. ${MementoSectionRestore}
  517. UAC_Elevate:
  518. UAC::RunElevated
  519. StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
  520. StrCmp 0 $0 0 UAC_Err ; Error?
  521. StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
  522. Quit
  523. UAC_Err:
  524. MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
  525. Abort
  526. UAC_ElevationAborted:
  527. Abort
  528. UAC_Success:
  529. StrCmp 1 $3 +4 ;Admin?
  530. StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
  531. MessageBox MB_ICONSTOP $UAC_INSTALLER_REQUIRE_ADMIN
  532. goto UAC_Elevate
  533. ;Prevent multiple instances.
  534. System::Call 'kernel32::CreateMutexA(i 0, i 0, t "owncloudInstaller") i .r1 ?e'
  535. Pop $R0
  536. StrCmp $R0 0 +3
  537. MessageBox MB_OK|MB_ICONEXCLAMATION $INIT_INSTALLER_RUNNING
  538. Abort
  539. ;Use available InstallLocation when possible. This is useful in the uninstaller
  540. ;via re-install, which would otherwise use a default location - a bug.
  541. ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}" "InstallLocation"
  542. StrCmp $R0 "" SkipSetInstDir
  543. StrCpy $INSTDIR $R0
  544. SkipSetInstDir:
  545. ;Shutdown ${APPLICATION_NAME} in case Add/Remove re-installer option used.
  546. Call EnsureOwncloudShutdown
  547. FunctionEnd
  548. Function .onInstSuccess
  549. ${MementoSectionSave}
  550. UAC::Unload ;Must call unload!
  551. FunctionEnd
  552. Function .onInstFailed
  553. UAC::Unload ;Must call unload!
  554. FunctionEnd
  555. ##############################################################################
  556. # #
  557. # NSIS Uninstaller Event Handler Functions #
  558. # #
  559. ##############################################################################
  560. Function un.onInit
  561. UAC_Elevate:
  562. UAC::RunElevated
  563. StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
  564. StrCmp 0 $0 0 UAC_Err ; Error?
  565. StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
  566. Quit
  567. UAC_Err:
  568. MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
  569. Abort
  570. UAC_ElevationAborted:
  571. Abort
  572. UAC_Success:
  573. StrCmp 1 $3 +4 ;Admin?
  574. StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
  575. MessageBox MB_ICONSTOP $UAC_UNINSTALLER_REQUIRE_ADMIN
  576. goto UAC_Elevate
  577. ;Prevent multiple instances.
  578. System::Call 'kernel32::CreateMutexA(i 0, i 0, t "owncloudUninstaller") i .r1 ?e'
  579. Pop $R0
  580. StrCmp $R0 0 +3
  581. MessageBox MB_OK|MB_ICONEXCLAMATION $INIT_UNINSTALLER_RUNNING
  582. Abort
  583. ;Shutdown ${APPLICATION_NAME} in order to remove locked files.
  584. Call un.EnsureOwncloudShutdown
  585. FunctionEnd
  586. Function un.onUnInstSuccess
  587. UAC::Unload ;Must call unload!
  588. FunctionEnd
  589. Function un.onUnInstFailed
  590. UAC::Unload ;Must call unload!
  591. FunctionEnd