source: SMSSender/deploy/win/setup.nsi @ 433:309cb15053f1

Last change on this file since 433:309cb15053f1 was 433:309cb15053f1, checked in by Sämy Zehnder <saemy.zehnder@…>, 7 years ago
  • Updates the win deployment files to the newest version.
File size: 20.0 KB
Line 
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2; NSIS installer script for SMSSender ;
3; (http://nsis.sourceforge.net)       ;
4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5 !define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
6 
7!define build_path "c:\development\smssender-build"
8!define mingw_path "c:\toolchain\MinGW"
9!define openssl_path "c:\toolchain\OpenSSL"
10!define qt_path "c:\toolchain\Qt\4.8.6"
11 
12!define PRODUCT_NAME "SMSSender" 
13!define MAJOR_VERSION "3"
14!define VERSION "3.2.1"
15!define PRODUCT_VERSION "${VERSION}"
16!define PRODUCT_GROUP "gorrion" 
17!define PRODUCT_PUBLISHER "gorrión." 
18!define PRODUCT_WEB_SITE "http://smssender.gorrion.ch/" 
19!define PRODUCT_REG_ROOT_KEY "HKLM" 
20!define PRODUCT_DIR_REGKEY "Software\${PRODUCT_GROUP}\${PRODUCT_NAME}${MAJOR_VERSION}" 
21!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}${MAJOR_VERSION}" 
22!define PRODUCT_ID "{076CA7D2-C4CB-4340-9A60-C11DA9363C1B}" 
23
24CRCCheck On 
25 
26!define UMUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_REG_ROOT_KEY}" 
27!define UMUI_LANGDLL_REGISTRY_KEY "${PRODUCT_DIR_REGKEY}" 
28!define UMUI_LANGDLL_REGISTRY_VALUENAME "Language" 
29
30
31!define UMUI_PARAMS_REGISTRY_ROOT "${PRODUCT_REG_ROOT_KEY}"
32!define UMUI_PARAMS_REGISTRY_KEY "${PRODUCT_DIR_REGKEY}"
33
34!define UMUI_INSTALLDIR_REGISTRY_VALUENAME "InstallDir"         ;Replace the InstallDirRegKey instruction and automatically save the $INSTDIR variable
35
36!define UMUI_VERSION "${PRODUCT_VERSION}"
37!define UMUI_VERBUILD "${PRODUCT_VERSION}"
38
39!define UMUI_VERSION_REGISTRY_VALUENAME "Version"
40!define UMUI_VERBUILD_REGISTRY_VALUENAME "VerBuild"
41
42!define UMUI_UNINSTALLPATH_REGISTRY_VALUENAME "uninstallpath"
43!define UMUI_INSTALLERFULLPATH_REGISTRY_VALUENAME "installpath"
44!define UMUI_UNINSTALL_FULLPATH "$INSTDIR\Uninstall.exe"
45!define UMUI_PREUNINSTALL_FUNCTION preuninstall_function
46 
47!define STARTMENU_DIR "$SMPROGRAMS\${PRODUCT_NAME}"
48
49;;;;;;;;;;;;;
50; Variables ;
51;;;;;;;;;;;;;
52
53  Var StartMenuFolder
54
55 
56;;;;;;;;;;;;;;;;;;;;;;;;;
57; General configuration ;
58;;;;;;;;;;;;;;;;;;;;;;;;;
59 
60        Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" 
61        OutFile SMSSender-${VERSION}-win32.exe
62        InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" 
63        InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" 
64        !ifdef NSIS_LZMA_COMPRESS_WHOLE
65                SetCompressor lzma 
66        !else 
67                SetCompressor /SOLID lzma 
68        !endif 
69         
70         
71        ;Request application privileges for Windows Vista
72        RequestExecutionLevel admin
73
74         
75        ;ShowInstDetails show
76        ;ShowUnInstDetails show
77        SetOverwrite ifnewer 
78        CRCCheck on 
79        BrandingText "${PRODUCT_NAME}" 
80 
81        ;Installation types
82        InstType $(Name_InstTypeFull)
83        InstType $(Name_InstTypeMinimum)
84 
85 
86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
87; NSIS Modern User Interface configuration ;
88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
89 
90; MUI 2 compatible ------
91  !include "UMUI.nsh" 
92  !include "MUIEx.nsh"
93  !include "Sections.nsh"
94  !include "nsProcess.nsh"
95  !include "WordFunc.nsh"
96  !include "FileFunc.nsh"
97   
98; MUI Settings
99  !define MUI_ABORTWARNING
100;  !define MUI_ICON "vlc48x48.ico"
101;  !define MUI_UNICON "vlc48x48.ico"
102  !define MUI_COMPONENTSPAGE_SMALLDESC
103 
104
105; Installer pages
106  ; Welcome page
107    !define MUI_WELCOMEPAGE_TITLE_3LINES
108    !insertmacro MUI_PAGE_WELCOME
109        ; Modify page
110                !define UMUI_MAINTENANCEPAGE_MODIFY
111                !define UMUI_MAINTENANCEPAGE_REMOVE
112                !insertmacro UMUI_PAGE_MAINTENANCE
113        ; Update page   
114                !insertmacro UMUI_PAGE_UPDATE
115  ; License page
116    !insertmacro MUI_PAGE_LICENSE "..\..\copyright.txt" 
117  ; Components page
118                !define UMUI_COMPONENTSPAGE_REGISTRY_VALUENAME "components"
119    !insertmacro MUI_PAGE_COMPONENTS
120  ; Directory page
121    !insertmacro MUI_PAGE_DIRECTORY
122  ;Start Menu Folder page
123          !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" 
124          !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_DIR_REGKEY}" 
125          !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
126                !insertmacro UMUI_PAGE_ALTERNATIVESTARTMENU Application $StartMenuFolder
127;               !insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder 
128        ; Confirm page
129                !define UMUI_CONFIRMPAGE_TEXTBOX confirm_function
130                !insertmacro UMUI_PAGE_CONFIRM
131        ; Instfiles page
132    !insertmacro MUI_PAGE_INSTFILES
133  ; Finish page
134    !define MUI_FINISHPAGE_RUN "$INSTDIR\bin\smssender.exe" 
135                !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\changelog.txt"
136                !define MUI_TEXT_FINISH_SHOWREADME "&Show Changelog"
137               
138;    !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt"
139;    !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
140    !define MUI_FINISHPAGE_LINK $(Link_VisitWebsite)
141    !define MUI_FINISHPAGE_LINK_LOCATION "${PRODUCT_WEB_SITE}" 
142    !define MUI_FINISHPAGE_NOREBOOTSUPPORT
143    !insertmacro MUI_PAGE_FINISH
144        ; Abort
145                !insertmacro UMUI_PAGE_ABORT
146 
147 
148; Uninstaller pages
149    !insertmacro MUI_UNPAGE_CONFIRM
150    !insertmacro MUI_UNPAGE_COMPONENTS
151    !insertmacro MUI_UNPAGE_INSTFILES
152    !insertmacro MUI_UNPAGE_FINISH
153    !insertmacro UMUI_UNPAGE_ABORT
154 
155 
156; Language files
157  !insertmacro MUI_LANGUAGE "English" # first language is the default language
158  !insertmacro MUI_LANGUAGE "German" 
159  !include "languages\english.nsh" 
160  !include "languages\german.nsh" 
161
162 
163; Reserve files for solid compression
164  !insertmacro MUI_RESERVEFILE_LANGDLL
165  ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
166 
167 
168; MUI end ------
169 
170 
171;;;;;;;;;;;;;;;;;;;;;;;
172; Macro and Functions ;
173;;;;;;;;;;;;;;;;;;;;;;;
174 
175
176;;;;;;;;;;;;;;;
177; 1. Logging  ;
178;;;;;;;;;;;;;;;
179Var UninstallLog
180!macro OpenUninstallLog
181  FileOpen $UninstallLog "$INSTDIR\uninstall.log" a
182  FileSeek $UninstallLog 0 END 
183!macroend 
184 
185 
186!macro CloseUninstallLog
187  FileClose $UninstallLog 
188  SetFileAttributes "$INSTDIR\uninstall.log" HIDDEN 
189!macroend 
190 
191 
192;;;;;;;;;;;;;;;;;;;;
193; 2. Installations ;
194;;;;;;;;;;;;;;;;;;;;
195!macro WriteFileToUninstallLog FILEPATH
196        FileWrite $UninstallLog "${FILEPATH}"
197!macroend
198
199!macro InstallFile SRCPATH FILEREGEX FILEPATH
200  File "${SRCPATH}${FILEREGEX}" 
201  !define Index 'Line${__LINE__}' 
202  FindFirst $0 $1 "$INSTDIR\${FILEPATH}${FILEREGEX}" 
203  StrCmp $0 "" "${Index}-End" 
204  "${Index}-Loop:" 
205    StrCmp $1 "" "${Index}-End" 
206        !insertmacro WriteFileToUninstallLog "${FILEPATH}$1$\r$\n" 
207    FindNext $0 $1 
208    Goto "${Index}-Loop" 
209  "${Index}-End:" 
210  !undef Index
211!macroend 
212 
213 
214!macro InstallFolder FOLDER
215  File /r "${FOLDER}" 
216  Push "${FOLDER}" 
217  Call InstallFolderInternal
218!macroend 
219 
220
221Function InstallFolderInternal 
222  Pop $9 
223  !define Index 'Line${__LINE__}' 
224  FindFirst $0 $1 "$INSTDIR\$9\*" 
225  StrCmp $0 "" "${Index}-End" 
226  "${Index}-Loop:" 
227    StrCmp $1 "" "${Index}-End" 
228    StrCmp $1 "." "${Index}-Next" 
229    StrCmp $1 ".." "${Index}-Next" 
230    IfFileExists "$9\$1\*" 0 "${Index}-Write" 
231      Push $0 
232      Push $9 
233      Push "$9\$1" 
234      Call InstallFolderInternal
235      Pop $9 
236      Pop $0 
237      Goto "${Index}-Next" 
238    "${Index}-Write:" 
239    FileWrite $UninstallLog "$9\$1$\r$\n" 
240    "${Index}-Next:" 
241    FindNext $0 $1 
242    Goto "${Index}-Loop" 
243  "${Index}-End:" 
244  !undef Index
245FunctionEnd 
246;;; End of Macros
247 
248 
249;;;;;;;;;;;;;;;;;;;;;;
250; Installer sections ;
251; The CORE of the    ;
252; installer          ;
253;;;;;;;;;;;;;;;;;;;;;;
254
255
256Section $(Name_Sec_MainProgram) Sec_MainProgram
257        SectionIn 1 2 RO
258        SetShellVarContext all 
259        SetOutPath "$INSTDIR" 
260 
261        FileOpen $9 $INSTDIR\version w
262        FileWrite $9 "${PRODUCT_VERSION}"
263        FileClose $9
264        SetFileAttributes "$INSTDIR\version" HIDDEN
265 
266  !insertmacro OpenUninstallLog
267          SetOutPath "$INSTDIR"
268          !insertmacro InstallFile "..\..\" copyright.txt ""
269      CreateShortCut "$INSTDIR\smssender.lnk" "$INSTDIR\bin\smssender.exe"
270          !insertmacro WriteFileToUninstallLog "smssender.lnk$\r$\n"
271         
272          SetOutPath "$INSTDIR\bin"
273          !insertmacro InstallFile "${build_path}\" smssender.exe "bin\"
274          !insertmacro InstallFile "${build_path}\" common-gui3.dll "bin\"
275          !insertmacro InstallFile "${build_path}\" gateways-common-gui3.dll "bin\"
276         
277          !insertmacro InstallFile "${mingw_path}\bin\" cryptopp.dll "bin\"
278          !insertmacro InstallFile "${mingw_path}\bin\" libgcc_s_dw2-1.dll "bin\"
279          !insertmacro InstallFile "${mingw_path}\bin\" libqjson.dll "bin\"
280          !insertmacro InstallFile "${mingw_path}\bin\" libstdc++-6.dll "bin\"
281          !insertmacro InstallFile "${openssl_path}\" libeay32.dll "bin\"
282          !insertmacro InstallFile "${openssl_path}\" libssl32.dll "bin\"
283          !insertmacro InstallFile "${openssl_path}\" ssleay32.dll "bin\"
284          !insertmacro InstallFile "${qt_path}\bin\" libwinpthread-1.dll "bin\"
285          !insertmacro InstallFile "${qt_path}\bin\" QtCore4.dll "bin\"
286          !insertmacro InstallFile "${qt_path}\bin\" QtGui4.dll "bin\"
287          !insertmacro InstallFile "${qt_path}\bin\" QtNetwork4.dll "bin\"
288          !insertmacro InstallFile "${qt_path}\bin\" QtSql4.dll "bin\"
289          !insertmacro InstallFile "${qt_path}\bin\" QtXml4.dll "bin\"
290;         !insertmacro InstallFile "files\" efsadu.dll ""
291;         !insertmacro InstallFile "files\" mingwm10.dll ""
292;         !insertmacro InstallFile "files\" msvcp60.dll ""
293;         !insertmacro InstallFile "files\" msvcr90.dll ""
294;         !insertmacro InstallFile "files\" msvcrt.dll ""
295         
296          SetOutPath "$INSTDIR\bin\imageformats"
297          !insertmacro InstallFile "${qt_path}\plugins\imageformats\" qgif4.dll "bin\imageformats\"
298          !insertmacro InstallFile "${qt_path}\plugins\imageformats\" qico4.dll "bin\imageformats\"
299          !insertmacro InstallFile "${qt_path}\plugins\imageformats\" qjpeg4.dll "bin\imageformats\"
300          !insertmacro InstallFile "${qt_path}\plugins\imageformats\" qmng4.dll "bin\imageformats\"
301          !insertmacro InstallFile "${qt_path}\plugins\imageformats\" qsvg4.dll "bin\imageformats\"
302          !insertmacro InstallFile "${qt_path}\plugins\imageformats\" qtga4.dll "bin\imageformats\"
303          !insertmacro InstallFile "${qt_path}\plugins\imageformats\" qtiff4.dll "bin\imageformats\"
304
305          SetOutPath "$INSTDIR\bin\sqldrivers"
306          !insertmacro InstallFile "${qt_path}\plugins\sqldrivers\" qsqlite4.dll "bin\sqldrivers\"
307
308
309          SetOutPath "$INSTDIR"
310          !insertmacro WriteFileToUninstallLog "version$\r$\n"
311  !insertmacro CloseUninstallLog
312 
313   ;Store installation folder
314          WriteRegStr HKCU "${PRODUCT_DIR_REGKEY}" "" $INSTDIR
315SectionEnd
316
317SectionGroup /e $(Name_Sec_Gateways) Sec_Gateways
318
319        Section $(Name_Sec_Gtwy_ETHZ) Sec_Gtwy_ETHZ
320                SectionIn 1
321                SetOutPath "$INSTDIR\gateways" 
322               
323                !insertmacro OpenUninstallLog
324                        !insertmacro InstallFile "${build_path}\gateways\" ethz-gui3.dll "gateways\"
325                !insertmacro CloseUninstallLog
326        SectionEnd
327        Section $(Name_Sec_Gtwy_Post) Sec_Gtwy_Post
328                SectionIn 1
329                SetOutPath "$INSTDIR\gateways" 
330               
331                !insertmacro OpenUninstallLog
332                        !insertmacro InstallFile "${build_path}\gateways\" post-gui3.dll "gateways\"
333                !insertmacro CloseUninstallLog
334        SectionEnd
335        Section $(Name_Sec_Gtwy_Schoolnet) Sec_Gtwy_Schoolnet
336                SectionIn 1
337                SetOutPath "$INSTDIR\gateways" 
338               
339                !insertmacro OpenUninstallLog
340                        !insertmacro InstallFile "${build_path}\gateways\" schoolnet-gui3.dll "gateways\"
341                !insertmacro CloseUninstallLog
342        SectionEnd
343        Section $(Name_Sec_Gtwy_Smartphone) Sec_Gtwy_Smartphone
344                SectionIn 1
345                SetOutPath "$INSTDIR\gateways" 
346               
347                !insertmacro OpenUninstallLog
348                        !insertmacro InstallFile "${build_path}\gateways\" smartphone-gui3.dll "gateways\"
349                !insertmacro CloseUninstallLog
350        SectionEnd
351        Section $(Name_Sec_Gtwy_Sunrise) Sec_Gtwy_Sunrise
352                SectionIn 1
353                SetOutPath "$INSTDIR\gateways" 
354               
355                !insertmacro OpenUninstallLog
356                        !insertmacro InstallFile "${build_path}\gateways\" sunrise-gui3.dll "gateways\"
357                !insertmacro CloseUninstallLog
358        SectionEnd
359
360SectionGroupEnd
361
362; Page functions
363
364Function preuninstall_function
365        ; execute this function only in Modify, repair and update function
366        !insertmacro UMUI_IF_INSTALLFLAG_IS ${UMUI_MODIFY}|${UMUI_REPAIR}|${UMUI_UPDATE}
367
368                ; Delete all files in folder, so the new ones can be updated / replaced (by modify)
369          FileOpen $UninstallLog "$INSTDIR\uninstall.log" r
370          UninstallLoop: 
371                ClearErrors 
372                FileRead $UninstallLog $R0 
373                IfErrors UninstallEnd
374                Push $R0 
375                Call TrimNewLines
376                Pop $R0 
377                Delete "$INSTDIR\$R0" 
378                Goto UninstallLoop
379          UninstallEnd: 
380          FileClose $UninstallLog 
381                Delete "$INSTDIR\uninstall.log"
382                Delete "$INSTDIR\Uninstall.exe"
383               
384                DeleteRegKey ${UMUI_PARAMS_REGISTRY_ROOT} "${UMUI_PARAMS_REGISTRY_KEY}"
385
386        !insertmacro UMUI_ENDIF_INSTALLFLAG
387FunctionEnd
388
389; Has to be after the section definition block
390!macro confirm_addline section
391  SectionGetFlags ${Sec_${section}} $1
392  IntOp $1 $1 & ${SF_SELECTED}
393  IntCmp $1 ${SF_SELECTED} 0 n${section} n${section}
394    SectionGetText ${Sec_${section}} $1
395    !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "    - $1"
396  n${section}:
397!macroend
398
399Function confirm_function
400  !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "$(UMUI_TEXT_INSTCONFIRM_TEXTBOX_DESTINATION_LOCATION)"
401  !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "      $INSTDIR"
402  !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE ""
403
404  !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "$(UMUI_TEXT_INSTCONFIRM_TEXTBOX_COMPNENTS)"
405
406  !insertmacro confirm_addline MainProgram
407  !insertmacro confirm_addline Gtwy_ETHZ
408  !insertmacro confirm_addline Gtwy_Post
409  !insertmacro confirm_addline Gtwy_Schoolnet
410  !insertmacro confirm_addline Gtwy_Smartphone
411  !insertmacro confirm_addline Gtwy_Sunrise
412FunctionEnd
413
414;--------------------------------
415;Descriptions
416
417  ;Declare all the components (Needed by UMUI_COMPONENTSPAGE_REGISTRY_VALUENAME)
418  !insertmacro UMUI_DECLARECOMPONENTS_BEGIN
419  !insertmacro UMUI_COMPONENT Sec_MainProgram
420  !insertmacro UMUI_COMPONENT Sec_Gtwy_ETHZ
421  !insertmacro UMUI_COMPONENT Sec_Gtwy_Post
422  !insertmacro UMUI_COMPONENT Sec_Gtwy_Schoolnet
423  !insertmacro UMUI_COMPONENT Sec_Gtwy_Smartphone
424  !insertmacro UMUI_COMPONENT Sec_Gtwy_Sunrise
425  !insertmacro UMUI_DECLARECOMPONENTS_END
426
427  ;Assign language strings to sections
428  !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
429  !insertmacro MUI_DESCRIPTION_TEXT ${Sec_MainProgram} $(Desc_Sec_MainProgram)
430  !insertmacro MUI_DESCRIPTION_TEXT ${Sec_Gateways} $(Desc_Sec_Gateways)
431  !insertmacro MUI_DESCRIPTION_TEXT ${Sec_Gtwy_ETHZ} $(Desc_Sec_Gtwy_ETHZ)
432  !insertmacro MUI_DESCRIPTION_TEXT ${Sec_Gtwy_Post} $(Desc_Sec_Gtwy_Post)
433  !insertmacro MUI_DESCRIPTION_TEXT ${Sec_Gtwy_Schoolnet} $(Desc_Sec_Gtwy_Schoolnet)
434  !insertmacro MUI_DESCRIPTION_TEXT ${Sec_Gtwy_Smartphone} $(Desc_Sec_Gtwy_Smartphone)
435  !insertmacro MUI_DESCRIPTION_TEXT ${Sec_Gtwy_Sunrise} $(Desc_Sec_Gtwy_Sunrise)
436  !insertmacro MUI_FUNCTION_DESCRIPTION_END
437
438 
439;;; Start function
440Function .onInit
441  !insertmacro MUI_LANGDLL_DISPLAY
442FunctionEnd
443
444Function myGuiInit
445  loop:
446    ${nsProcess::FindProcess} "smssender.exe" $R0
447    StrCmp $R0 0 0 +3
448    MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(Message_RunningProcess) IDOK loop IDCANCEL cancel
449  cancel:
450    Abort
451  ${nsProcess::Unload}
452 
453 
454  ; Check if a older version (< 2.2.x) is installed. If so uninstall it first.
455  ReadRegStr $R0  ${PRODUCT_REG_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" ; Get the uninstaller filename
456  StrCmp $R0 "" done
457
458  !insertmacro VersionCompare
459 
460  ReadRegStr $R1  ${PRODUCT_REG_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" 
461  ${VersionCompare} $R1 "2.2.0.0" $R1
462  StrCmp $R1 0 done ; If it is 2.2.0.0
463  StrCmp $R1 1 done ; If it is newer than 2.2.0.0
464 
465  MessageBox MB_YESNO|MB_ICONEXCLAMATION $(Message_AlreadyInstalled) IDNO done
466
467  ;Run the uninstaller
468  uninst: 
469    ClearErrors
470
471        ${GetParent} $R0 $R3 ; Get the path of the uninstaller
472    ExecWait '$R0 _?=$R3' ; Do not copy the uninstaller to a temp file
473  done: 
474
475FunctionEnd 
476 
477 
478;; End function
479Section -Post
480  WriteUninstaller "$INSTDIR\uninstall.exe" 
481  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "InstallDir" $INSTDIR 
482  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Version" "${VERSION}" 
483  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\bin\smssender.exe" 
484 
485 
486  WriteRegStr ${PRODUCT_REG_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" 
487  WriteRegStr ${PRODUCT_REG_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe" 
488  WriteRegStr ${PRODUCT_REG_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\smssender.exe" 
489  WriteRegStr ${PRODUCT_REG_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" 
490  WriteRegStr ${PRODUCT_REG_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" 
491  WriteRegStr ${PRODUCT_REG_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" 
492
493  ;Save Startmenu items, if needed
494  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
495    CreateShortCut "$DESKTOP\smssender.lnk" "$INSTDIR\bin\smssender.exe"
496    CreateDirectory "${STARTMENU_DIR}"
497    CreateShortCut "${STARTMENU_DIR}\smssender.lnk" "$INSTDIR\bin\smssender.exe"
498    CreateShortCut "${STARTMENU_DIR}\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
499  !insertmacro MUI_STARTMENU_WRITE_END
500SectionEnd 
501
502
503
504;;;;;;;;;;;;;;;;;;;;;;;;
505; Uninstaller sections ;
506;;;;;;;;;;;;;;;;;;;;;;;;
507 
508 
509; TrimNewlines (copied from NSIS documentation)
510; input, top of stack  (e.g. whatever$\r$\n)
511; output, top of stack (replaces, with e.g. whatever)
512; modifies no other variables.
513Function TrimNewlines
514 Exch $R0 
515 Push $R1 
516 Push $R2 
517 StrCpy $R1 0
518 
519 loop: 
520   IntOp $R1 $R1 - 1
521   StrCpy $R2 $R0 1 $R1 
522   StrCmp $R2 "$\r" loop
523   StrCmp $R2 "$\n" loop
524   IntOp $R1 $R1 + 1
525   IntCmp $R1 0 no_trim_needed
526   StrCpy $R0 $R0 $R1 
527 
528 no_trim_needed: 
529   Pop $R2 
530   Pop $R1 
531   Exch $R0 
532FunctionEnd 
533Function un.TrimNewlines 
534 Exch $R0 
535 Push $R1 
536 Push $R2 
537 StrCpy $R1 0
538 
539 loop: 
540   IntOp $R1 $R1 - 1
541   StrCpy $R2 $R0 1 $R1 
542   StrCmp $R2 "$\r" loop
543   StrCmp $R2 "$\n" loop
544   IntOp $R1 $R1 + 1
545   IntCmp $R1 0 no_trim_needed
546   StrCpy $R0 $R0 $R1 
547 
548 no_trim_needed: 
549   Pop $R2 
550   Pop $R1 
551   Exch $R0 
552FunctionEnd 
553 
554 
555Function un.RemoveEmptyDirs 
556  Pop $9 
557  !define Index 'Line${__LINE__}' 
558  FindFirst $0 $1 "$INSTDIR$9*" 
559  StrCmp $0 "" "${Index}-End" 
560  "${Index}-Loop:" 
561    StrCmp $1 "" "${Index}-End" 
562    StrCmp $1 "." "${Index}-Next" 
563    StrCmp $1 ".." "${Index}-Next" 
564      Push $0 
565      Push $1 
566      Push $9 
567      Push "$9$1\" 
568      Call un.RemoveEmptyDirs
569      Pop $9 
570      Pop $1 
571      Pop $0 
572    "${Index}-Remove:" 
573    RMDir "$INSTDIR$9$1" 
574    "${Index}-Next:" 
575    FindNext $0 $1 
576    Goto "${Index}-Loop" 
577  "${Index}-End:" 
578  FindClose $0 
579  !undef Index
580FunctionEnd 
581 
582 
583Section "un.$(Name_Sec_Uninstall)" Sec_Uninstall
584  SectionIn 1 2 RO
585  SetShellVarContext all 
586 
587  FileOpen $UninstallLog "$INSTDIR\uninstall.log" r
588  UninstallLoop: 
589    ClearErrors 
590    FileRead $UninstallLog $R0 
591    IfErrors UninstallEnd
592    Push $R0 
593    Call un.TrimNewLines
594    Pop $R0 
595    Delete "$INSTDIR\$R0" 
596    Goto UninstallLoop
597  UninstallEnd: 
598  FileClose $UninstallLog 
599  Delete "$INSTDIR\uninstall.log" 
600  Delete "$INSTDIR\uninstall.exe" 
601  Push "\" 
602  Call un.RemoveEmptyDirs
603  RMDir "$INSTDIR" 
604 
605 
606  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" 
607 
608  DeleteRegKey ${PRODUCT_REG_ROOT_KEY} "${PRODUCT_UNINST_KEY}" 
609  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" 
610  SetAutoClose true 
611
612  ;Delete Startmenu links
613  !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
614  Delete "$DESKTOP\SMSSender.lnk"
615  Delete "${STARTMENU_DIR}\Uninstall.lnk"
616  Delete "${STARTMENU_DIR}\SMSSender.lnk"
617  RMDir "${STARTMENU_DIR}"
618  RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
619SectionEnd 
620
621
622Section /o "un.$(Name_Sec_Uninstall_Prefs)" Sec_Uninstall_Prefs
623  Delete "$INSTDIR\accounts.ini"
624  Delete "$INSTDIR\contacts.ini"
625  Delete "$INSTDIR\settings.ini"
626       
627  Call un.RemoveEmptyDirs
628  RMDir "$INSTDIR" 
629SectionEnd 
630 
631 
632; Uninstaller section descriptions
633!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
634!insertmacro MUI_DESCRIPTION_TEXT ${Sec_Uninstall} $(Desc_Sec_Uninstall)
635!insertmacro MUI_DESCRIPTION_TEXT ${Sec_Uninstall_Prefs} $(Desc_Sec_Uninstall_Prefs)
636!insertmacro MUI_UNFUNCTION_DESCRIPTION_END
637 
638Function un.onInit 
639  !insertmacro MUI_UNGETLANGUAGE
640FunctionEnd
Note: See TracBrowser for help on using the repository browser.