ring.nsi 9.7 KB
Newer Older
1
!define APPNAME "Jami"
2
!define COMPANYNAME "Savoir-Faire Linux"
3
!define DESCRIPTION "The Jami client for Windows"
4
# These three must be integers
Guillaume Roguez's avatar
Guillaume Roguez committed
5 6
!define VERSIONMAJOR 1
!define VERSIONMINOR 0
Guillaume Roguez's avatar
Guillaume Roguez committed
7
!define VERSIONBUILD 0
8 9 10
# These will be displayed by the "Click here for support information" link in "Add/Remove Programs"
# It is possible to use "mailto:" links in here to open the email client
!define HELPURL "https://projects.savoirfairelinux.com/projects/ring/wiki" # "Support Information" link
11 12
!define UPDATEURL "http://jami.net/en/documentation/windows-installation" # "Product Updates" link
!define ABOUTURL "http://jami.net/en#about" # "Publisher" link
13 14 15

!include "MUI2.nsh"

16
!define MUI_ICON "jami.ico"
17 18 19 20 21 22
!define MUI_WELCOMEPAGE
!define MUI_LICENSEPAGE
!define MUI_DIRECTORYPAGE
!define MUI_ABORTWARNING
!define MUI_UNINSTALLER
!define MUI_UNCONFIRMPAGE
23
   !define MUI_FINISHPAGE_RUN
24
   !define MUI_FINISHPAGE_RUN_TEXT "Launch Jami"
25 26 27 28 29 30 31
   !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink"

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "License.rtf"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
32

33 34 35 36 37
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES

38 39 40 41 42 43 44
!insertmacro MUI_LANGUAGE "English"

RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on)

# This will be in the installer/uninstaller's title bar
Name "${COMPANYNAME} - ${APPNAME}"

45
outFile "ring-windows-nightly.exe"
46 47 48 49

!include LogicLib.nsh
!include "FileFunc.nsh"

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
Function StrRep
  Exch $R4 ; $R4 = Replacement String
  Exch
  Exch $R3 ; $R3 = String to replace (needle)
  Exch 2
  Exch $R1 ; $R1 = String to do replacement in (haystack)
  Push $R2 ; Replaced haystack
  Push $R5 ; Len (needle)
  Push $R6 ; len (haystack)
  Push $R7 ; Scratch reg
  StrCpy $R2 ""
  StrLen $R5 $R3
  StrLen $R6 $R1
loop:
  StrCpy $R7 $R1 $R5
  StrCmp $R7 $R3 found
  StrCpy $R7 $R1 1 ; - optimization can be removed if U know len needle=1
  StrCpy $R2 "$R2$R7"
  StrCpy $R1 $R1 $R6 1
  StrCmp $R1 "" done loop
found:
  StrCpy $R2 "$R2$R4"
  StrCpy $R1 $R1 $R6 $R5
  StrCmp $R1 "" done loop
done:
  StrCpy $R3 $R2
  Pop $R7
  Pop $R6
  Pop $R5
  Pop $R2
  Pop $R1
  Pop $R4
  Exch $R3
FunctionEnd

!macro _StrReplaceConstructor ORIGINAL_STRING TO_REPLACE REPLACE_BY
  Push "${ORIGINAL_STRING}"
  Push "${TO_REPLACE}"
  Push "${REPLACE_BY}"
  Call StrRep
  Pop $0
!macroend

!define StrReplace '!insertmacro "_StrReplaceConstructor"'

95 96 97 98 99 100 101 102 103 104
!macro VerifyUserIsAdmin
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights on NT4+
        messageBox mb_iconstop "Administrator rights required!"
        setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
        quit
${EndIf}
!macroend

Edric Milaret's avatar
Edric Milaret committed
105 106
!include x64.nsh

107 108 109
function .onInit
        setShellVarContext all
        !insertmacro VerifyUserIsAdmin
110 111 112 113 114 115
        ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation"
        StrCmp $0 "" notfound
        ${StrReplace} $0 "$\"" ""
        StrCpy $INSTDIR $0
        Goto done
notfound:
Edric Milaret's avatar
Edric Milaret committed
116 117 118 119 120 121
        StrCpy $INSTDIR "$PROGRAMFILES\${COMPANYNAME}\${APPNAME}"
        ${If} ${ARCH} == "x64"
         ${If} ${RunningX64}
            StrCpy $INSTDIR "$PROGRAMFILES64\${COMPANYNAME}\${APPNAME}"
         ${EndIf}
        ${EndIf}
122
done:
123 124
functionEnd

125
Function LaunchLink
126
  ExecShell "" "$DESKTOP\Jami.lnk"
127 128
FunctionEnd

129
section "install"
130 131 132
        !addincludedir "../../NsProcess/Include"
        !addplugindir "../../NsProcess/Plugin"
        !include "nsProcess.nsh"
133 134
        # Kill all remaining Jami processes
        ${nsProcess::FindProcess} "Jami.exe" $R0
135
        ${If} $R0 == 0
136
         ${nsProcess::KillProcess} "Jami.exe" $R0
137 138 139
        ${EndIf}
        Sleep 500

140 141 142
        # Files for the install directory - to build the installer, these should be in the same directory as the install script (this file)
        setOutPath $INSTDIR
        # Files added here should be removed by the uninstaller (see section "uninstall")
143
        file "vc_redist.x64.exe"
144 145
        file "Jami.exe"
        file "jami.ico"
146
        file "qtwebengine_resources.pak"
147 148
        file "qtwebengine_resources_100p.pak"
        file "qtwebengine_resources_200p.pak"
149 150
        file "QtWebEngineProcess.exe"
        file "icudtl.dat"
151 152
        file *.dll
        setOutPath $INSTDIR\platforms
153
        file platforms\*
154
        setOutPath $INSTDIR\imageformats
155
        file imageformats\*
156
        setOutPath $INSTDIR\sqldrivers
157
        file sqldrivers\*
158
        setOutPath $INSTDIR\ringtones
159
        file ringtones\*
160
        setOutPath $INSTDIR\share\ring\translations
161
        file share\ring\translations\*
162
        setOutPath $INSTDIR\share\libringclient\translations
163
        file share\libringclient\translations\*
164 165 166 167

        # Uninstaller - See function un.onInit and section "uninstall" for configuration
        writeUninstaller "$INSTDIR\uninstall.exe"

168
        SetOutPath $INSTDIR
169
        #Desktop
170
        CreateShortCut "$DESKTOP\Jami.lnk" "$INSTDIR\Jami.exe" ""
171 172 173

        # Start Menu
        createDirectory "$SMPROGRAMS\${COMPANYNAME}"
174
        createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" "$INSTDIR\Jami.exe" "" "$INSTDIR\jami.ico"
175 176 177 178 179

        # Registry information for add/remove programs
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayName" ${APPNAME}
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"
180
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" $INSTDIR
181
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayIcon" "$\"$INSTDIR\jami.ico$\""
182 183 184 185 186 187 188 189 190 191 192 193 194
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "Publisher" "${COMPANYNAME}"
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "HelpLink" "$\"${HELPURL}$\""
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "URLUpdateInfo" "$\"${UPDATEURL}$\""
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "URLInfoAbout" "$\"${ABOUTURL}$\""
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayVersion" "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}"
        WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMajor" ${VERSIONMAJOR}
        WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMinor" ${VERSIONMINOR}
        # There is no option for modifying or repairing the install
        WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoModify" 1
        WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoRepair" 1
        ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
        IntFmt $0 "0x%08X" $0
        WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "EstimatedSize" "$0"
195 196 197

        # Write ring protocol in registry
        WriteRegStr HKCR "ring" "URL Protocol" "$\"$\""
198 199
        WriteRegStr HKCR "ring\DefaultIcon" "" "$\"$INSTDIR\Jami.exe,1$\""
        WriteRegStr HKCR "ring\shell\open\command" "" "$\"$INSTDIR\Jami.exe$\" $\"%1$\""
200 201
        
        # force vc_redist for now
202 203
        ExecWait "vc_redist.x64.exe /install /passive /norestart"
        delete "$\"$INSTDIR\vc_redist.x64.exe$\""
204 205 206 207 208 209 210 211
sectionEnd

# Uninstaller

function un.onInit
        SetShellVarContext all

        #Verify the uninstaller - last chance to back out
212
        MessageBox MB_OKCANCEL "Permanently remove ${APPNAME}?" IDOK next
213 214 215 216 217
                Abort
        next:
        !insertmacro VerifyUserIsAdmin
functionEnd

218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
Function un.ModifyUnWelcome
${NSD_CreateCheckbox} 120u -18u 50% 12u "Remove configuration and history files"
Pop $1
SetCtlColors $1 "" ${MUI_BGCOLOR}
${NSD_Check} $1 ; Check it by default
FunctionEnd

Function un.LeaveUnWelcome
${NSD_GetState} $1 $0
${If} $0 <> 0
    rmDir /r "$LOCALAPPDATA\${COMPANYNAME}"
    rmDir /r "$PROFILE\.config\ring"
    rmDir /r "$PROFILE\.cache\ring"
    rmDir /r "$PROFILE\.local\share\ring"
${EndIf}
FunctionEnd

235 236 237 238 239 240 241 242
section "uninstall"

        # Remove Start Menu launcher
        delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk"
        # Try to remove the Start Menu folder - this will only happen if it is empty
        rmDir "$SMPROGRAMS\${COMPANYNAME}"

        # Remove files
243
        delete $INSTDIR\vc_redist.x64.exe
244 245
        delete $INSTDIR\Jami.exe
        delete $INSTDIR\jami.ico
246
        delete $INSTDIR\*.dll
247 248 249 250 251
        delete $INSTDIR\qtwebengine_resources.pak
        delete $INSTDIR\qtwebengine_resources_100p.pak
        delete $INSTDIR\qtwebengine_resources_200p.pak
        delete $INSTDIR\QtWebEngineProcess.exe
        delete $INSTDIR\icudtl.dat
252 253 254
        rmDir /r $INSTDIR\platforms
        rmDir /r $INSTDIR\imageformats
        rmDir /r $INSTDIR\ringtones
255
        rmDir /r $INSTDIR\share
256 257 258 259 260 261 262 263 264 265 266

        # Always delete uninstaller as the last action
        delete $INSTDIR\uninstall.exe

        # Try to remove the install directory - this will only happen if it is empty

        rmDir $INSTDIR

        # Remove uninstaller information from the registry
        DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}"
sectionEnd