Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 1 | !define APPNAME "Ring" |
| 2 | !define COMPANYNAME "Savoir-Faire Linux" |
| 3 | !define DESCRIPTION "The Ring client for Windows" |
| 4 | # These three must be integers |
Guillaume Roguez | 5fac25a | 2016-03-16 22:49:09 -0400 | [diff] [blame] | 5 | !define VERSIONMAJOR 1 |
| 6 | !define VERSIONMINOR 0 |
Guillaume Roguez | 106bcad | 2015-05-15 17:03:16 -0400 | [diff] [blame] | 7 | !define VERSIONBUILD 0 |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 8 | # These will be displayed by the "Click here for support information" link in "Add/Remove Programs" |
| 9 | # It is possible to use "mailto:" links in here to open the email client |
| 10 | !define HELPURL "https://projects.savoirfairelinux.com/projects/ring/wiki" # "Support Information" link |
| 11 | !define UPDATEURL "http://ring.cx/en/documentation/windows-installation" # "Product Updates" link |
| 12 | !define ABOUTURL "http://ring.cx/en#about" # "Publisher" link |
| 13 | |
| 14 | !include "MUI2.nsh" |
| 15 | |
| 16 | !define MUI_WELCOMEPAGE |
| 17 | !define MUI_LICENSEPAGE |
| 18 | !define MUI_DIRECTORYPAGE |
| 19 | !define MUI_ABORTWARNING |
| 20 | !define MUI_UNINSTALLER |
| 21 | !define MUI_UNCONFIRMPAGE |
Edric Milaret | c37591c | 2015-12-11 11:02:58 -0500 | [diff] [blame] | 22 | !define MUI_FINISHPAGE_RUN |
| 23 | !define MUI_FINISHPAGE_RUN_TEXT "Launch Ring" |
| 24 | !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink" |
| 25 | |
| 26 | !insertmacro MUI_PAGE_WELCOME |
| 27 | !insertmacro MUI_PAGE_LICENSE "License.rtf" |
| 28 | !insertmacro MUI_PAGE_DIRECTORY |
| 29 | !insertmacro MUI_PAGE_INSTFILES |
| 30 | !insertmacro MUI_PAGE_FINISH |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 31 | |
Edric Milaret | ab85189 | 2016-09-13 11:29:48 -0400 | [diff] [blame] | 32 | !define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome |
| 33 | !define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome |
| 34 | !insertmacro MUI_UNPAGE_WELCOME |
| 35 | !insertmacro MUI_UNPAGE_INSTFILES |
| 36 | |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 37 | !insertmacro MUI_LANGUAGE "English" |
| 38 | |
| 39 | RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on) |
| 40 | |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 41 | # This will be in the installer/uninstaller's title bar |
| 42 | Name "${COMPANYNAME} - ${APPNAME}" |
| 43 | |
Edric Milaret | 9e12e88 | 2015-05-21 11:52:05 -0400 | [diff] [blame] | 44 | outFile "ring-windows-nightly.exe" |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 45 | |
| 46 | !include LogicLib.nsh |
| 47 | !include "FileFunc.nsh" |
| 48 | |
Anthony Léonard | 2c02084 | 2017-04-11 11:04:33 -0400 | [diff] [blame] | 49 | Function StrRep |
| 50 | Exch $R4 ; $R4 = Replacement String |
| 51 | Exch |
| 52 | Exch $R3 ; $R3 = String to replace (needle) |
| 53 | Exch 2 |
| 54 | Exch $R1 ; $R1 = String to do replacement in (haystack) |
| 55 | Push $R2 ; Replaced haystack |
| 56 | Push $R5 ; Len (needle) |
| 57 | Push $R6 ; len (haystack) |
| 58 | Push $R7 ; Scratch reg |
| 59 | StrCpy $R2 "" |
| 60 | StrLen $R5 $R3 |
| 61 | StrLen $R6 $R1 |
| 62 | loop: |
| 63 | StrCpy $R7 $R1 $R5 |
| 64 | StrCmp $R7 $R3 found |
| 65 | StrCpy $R7 $R1 1 ; - optimization can be removed if U know len needle=1 |
| 66 | StrCpy $R2 "$R2$R7" |
| 67 | StrCpy $R1 $R1 $R6 1 |
| 68 | StrCmp $R1 "" done loop |
| 69 | found: |
| 70 | StrCpy $R2 "$R2$R4" |
| 71 | StrCpy $R1 $R1 $R6 $R5 |
| 72 | StrCmp $R1 "" done loop |
| 73 | done: |
| 74 | StrCpy $R3 $R2 |
| 75 | Pop $R7 |
| 76 | Pop $R6 |
| 77 | Pop $R5 |
| 78 | Pop $R2 |
| 79 | Pop $R1 |
| 80 | Pop $R4 |
| 81 | Exch $R3 |
| 82 | FunctionEnd |
| 83 | |
| 84 | !macro _StrReplaceConstructor ORIGINAL_STRING TO_REPLACE REPLACE_BY |
| 85 | Push "${ORIGINAL_STRING}" |
| 86 | Push "${TO_REPLACE}" |
| 87 | Push "${REPLACE_BY}" |
| 88 | Call StrRep |
| 89 | Pop $0 |
| 90 | !macroend |
| 91 | |
| 92 | !define StrReplace '!insertmacro "_StrReplaceConstructor"' |
| 93 | |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 94 | !macro VerifyUserIsAdmin |
| 95 | UserInfo::GetAccountType |
| 96 | pop $0 |
| 97 | ${If} $0 != "admin" ;Require admin rights on NT4+ |
| 98 | messageBox mb_iconstop "Administrator rights required!" |
| 99 | setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED |
| 100 | quit |
| 101 | ${EndIf} |
| 102 | !macroend |
| 103 | |
Edric Milaret | 06d5157 | 2016-04-25 12:13:34 -0400 | [diff] [blame] | 104 | !include x64.nsh |
| 105 | |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 106 | function .onInit |
| 107 | setShellVarContext all |
| 108 | !insertmacro VerifyUserIsAdmin |
Anthony Léonard | 2c02084 | 2017-04-11 11:04:33 -0400 | [diff] [blame] | 109 | ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" |
| 110 | StrCmp $0 "" notfound |
| 111 | ${StrReplace} $0 "$\"" "" |
| 112 | StrCpy $INSTDIR $0 |
| 113 | Goto done |
| 114 | notfound: |
Edric Milaret | 06d5157 | 2016-04-25 12:13:34 -0400 | [diff] [blame] | 115 | StrCpy $INSTDIR "$PROGRAMFILES\${COMPANYNAME}\${APPNAME}" |
| 116 | ${If} ${ARCH} == "x64" |
| 117 | ${If} ${RunningX64} |
| 118 | StrCpy $INSTDIR "$PROGRAMFILES64\${COMPANYNAME}\${APPNAME}" |
| 119 | ${EndIf} |
| 120 | ${EndIf} |
Anthony Léonard | 2c02084 | 2017-04-11 11:04:33 -0400 | [diff] [blame] | 121 | done: |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 122 | functionEnd |
| 123 | |
Edric Milaret | c37591c | 2015-12-11 11:02:58 -0500 | [diff] [blame] | 124 | Function LaunchLink |
| 125 | ExecShell "" "$DESKTOP\Ring.lnk" |
| 126 | FunctionEnd |
| 127 | |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 128 | section "install" |
Olivier SOLDANO | 1680f70 | 2016-11-30 16:11:10 -0500 | [diff] [blame] | 129 | !addincludedir "../../NsProcess/Include" |
| 130 | !addplugindir "../../NsProcess/Plugin" |
| 131 | !include "nsProcess.nsh" |
| 132 | # Kill all remaining Ring processes |
| 133 | ${nsProcess::FindProcess} "Ring.exe" $R0 |
| 134 | ${If} $R0 == 0 |
| 135 | ${nsProcess::KillProcess} "Ring.exe" $R0 |
| 136 | ${EndIf} |
| 137 | Sleep 500 |
| 138 | |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 139 | # Files for the install directory - to build the installer, these should be in the same directory as the install script (this file) |
| 140 | setOutPath $INSTDIR |
| 141 | # Files added here should be removed by the uninstaller (see section "uninstall") |
Edric Milaret | a34e4ba | 2015-06-01 14:47:49 -0400 | [diff] [blame] | 142 | file "Ring.exe" |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 143 | file "ring.ico" |
Andreas Traczyk | 5b6a60b | 2018-12-03 17:30:21 -0500 | [diff] [blame] | 144 | file "qtwebengine_resources.pak" |
| 145 | file "QtWebEngineProcess.exe" |
| 146 | file "icudtl.dat" |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 147 | file *.dll |
| 148 | setOutPath $INSTDIR\platforms |
Andreas Traczyk | dece161 | 2018-12-07 13:28:34 -0500 | [diff] [blame] | 149 | file platforms\* |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 150 | setOutPath $INSTDIR\imageformats |
Andreas Traczyk | dece161 | 2018-12-07 13:28:34 -0500 | [diff] [blame] | 151 | file imageformats\* |
Anthony Léonard | 88f8d5b | 2017-08-10 14:42:55 -0400 | [diff] [blame] | 152 | setOutPath $INSTDIR\sqldrivers |
Andreas Traczyk | dece161 | 2018-12-07 13:28:34 -0500 | [diff] [blame] | 153 | file sqldrivers\* |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 154 | setOutPath $INSTDIR\ringtones |
Andreas Traczyk | dece161 | 2018-12-07 13:28:34 -0500 | [diff] [blame] | 155 | file ringtones\* |
Edric Milaret | 53ac6e5 | 2015-09-14 13:37:06 -0400 | [diff] [blame] | 156 | setOutPath $INSTDIR\share\ring\translations |
Andreas Traczyk | dece161 | 2018-12-07 13:28:34 -0500 | [diff] [blame] | 157 | file share\ring\translations\* |
Edric Milaret | 53ac6e5 | 2015-09-14 13:37:06 -0400 | [diff] [blame] | 158 | setOutPath $INSTDIR\share\libringclient\translations |
Andreas Traczyk | dece161 | 2018-12-07 13:28:34 -0500 | [diff] [blame] | 159 | file share\libringclient\translations\* |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 160 | |
| 161 | # Uninstaller - See function un.onInit and section "uninstall" for configuration |
| 162 | writeUninstaller "$INSTDIR\uninstall.exe" |
| 163 | |
Edric Milaret | 465a314 | 2015-06-02 15:02:52 -0400 | [diff] [blame] | 164 | SetOutPath $INSTDIR |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 165 | #Desktop |
Edric Milaret | a34e4ba | 2015-06-01 14:47:49 -0400 | [diff] [blame] | 166 | CreateShortCut "$DESKTOP\Ring.lnk" "$INSTDIR\Ring.exe" "" |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 167 | |
| 168 | # Start Menu |
| 169 | createDirectory "$SMPROGRAMS\${COMPANYNAME}" |
Edric Milaret | a34e4ba | 2015-06-01 14:47:49 -0400 | [diff] [blame] | 170 | createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" "$INSTDIR\Ring.exe" "" "$INSTDIR\ring.ico" |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 171 | |
| 172 | # Registry information for add/remove programs |
| 173 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayName" ${APPNAME} |
| 174 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" |
| 175 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" |
Anthony Léonard | 2c02084 | 2017-04-11 11:04:33 -0400 | [diff] [blame] | 176 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" $INSTDIR |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 177 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayIcon" "$\"$INSTDIR\ring.ico$\"" |
| 178 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "Publisher" "${COMPANYNAME}" |
| 179 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "HelpLink" "$\"${HELPURL}$\"" |
| 180 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "URLUpdateInfo" "$\"${UPDATEURL}$\"" |
| 181 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "URLInfoAbout" "$\"${ABOUTURL}$\"" |
| 182 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayVersion" "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}" |
| 183 | WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMajor" ${VERSIONMAJOR} |
| 184 | WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMinor" ${VERSIONMINOR} |
| 185 | # There is no option for modifying or repairing the install |
| 186 | WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoModify" 1 |
| 187 | WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoRepair" 1 |
| 188 | ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 |
| 189 | IntFmt $0 "0x%08X" $0 |
| 190 | WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "EstimatedSize" "$0" |
Edric Milaret | fe39094 | 2015-08-04 13:41:03 -0400 | [diff] [blame] | 191 | |
| 192 | # Write ring protocol in registry |
| 193 | WriteRegStr HKCR "ring" "URL Protocol" "$\"$\"" |
| 194 | WriteRegStr HKCR "ring\DefaultIcon" "" "$\"$INSTDIR\Ring.exe,1$\"" |
| 195 | WriteRegStr HKCR "ring\shell\open\command" "" "$\"$INSTDIR\Ring.exe$\" $\"%1$\"" |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 196 | sectionEnd |
| 197 | |
| 198 | # Uninstaller |
| 199 | |
| 200 | function un.onInit |
| 201 | SetShellVarContext all |
| 202 | |
| 203 | #Verify the uninstaller - last chance to back out |
Anthony Léonard | 6572a94 | 2017-06-26 14:23:08 -0400 | [diff] [blame] | 204 | MessageBox MB_OKCANCEL "Permanently remove ${APPNAME}?" IDOK next |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 205 | Abort |
| 206 | next: |
| 207 | !insertmacro VerifyUserIsAdmin |
| 208 | functionEnd |
| 209 | |
Edric Milaret | ab85189 | 2016-09-13 11:29:48 -0400 | [diff] [blame] | 210 | Function un.ModifyUnWelcome |
| 211 | ${NSD_CreateCheckbox} 120u -18u 50% 12u "Remove configuration and history files" |
| 212 | Pop $1 |
| 213 | SetCtlColors $1 "" ${MUI_BGCOLOR} |
| 214 | ${NSD_Check} $1 ; Check it by default |
| 215 | FunctionEnd |
| 216 | |
| 217 | Function un.LeaveUnWelcome |
| 218 | ${NSD_GetState} $1 $0 |
| 219 | ${If} $0 <> 0 |
| 220 | rmDir /r "$LOCALAPPDATA\${COMPANYNAME}" |
| 221 | rmDir /r "$PROFILE\.config\ring" |
| 222 | rmDir /r "$PROFILE\.cache\ring" |
| 223 | rmDir /r "$PROFILE\.local\share\ring" |
| 224 | ${EndIf} |
| 225 | FunctionEnd |
| 226 | |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 227 | section "uninstall" |
| 228 | |
| 229 | # Remove Start Menu launcher |
| 230 | delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" |
| 231 | # Try to remove the Start Menu folder - this will only happen if it is empty |
| 232 | rmDir "$SMPROGRAMS\${COMPANYNAME}" |
| 233 | |
| 234 | # Remove files |
Edric Milaret | a34e4ba | 2015-06-01 14:47:49 -0400 | [diff] [blame] | 235 | delete $INSTDIR\Ring.exe |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 236 | delete $INSTDIR\ring.ico |
| 237 | delete $INSTDIR\*.dll |
| 238 | rmDir /r $INSTDIR\platforms |
| 239 | rmDir /r $INSTDIR\imageformats |
| 240 | rmDir /r $INSTDIR\ringtones |
Edric Milaret | 53ac6e5 | 2015-09-14 13:37:06 -0400 | [diff] [blame] | 241 | rmDir /r $INSTDIR\share |
Edric Milaret | 34eb920 | 2015-05-14 12:36:41 -0400 | [diff] [blame] | 242 | |
| 243 | # Always delete uninstaller as the last action |
| 244 | delete $INSTDIR\uninstall.exe |
| 245 | |
| 246 | # Try to remove the install directory - this will only happen if it is empty |
| 247 | |
| 248 | rmDir $INSTDIR |
| 249 | |
| 250 | # Remove uninstaller information from the registry |
| 251 | DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" |
| 252 | sectionEnd |