ring.nsi 8.95 KB
Newer Older
1 2 3 4
!define APPNAME "Ring"
!define COMPANYNAME "Savoir-Faire Linux"
!define DESCRIPTION "The Ring client for Windows"
# 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 11 12 13 14 15 16 17 18 19 20 21
# 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
!define UPDATEURL "http://ring.cx/en/documentation/windows-installation" # "Product Updates" link
!define ABOUTURL "http://ring.cx/en#about" # "Publisher" link

!include "MUI2.nsh"

!define MUI_WELCOMEPAGE
!define MUI_LICENSEPAGE
!define MUI_DIRECTORYPAGE
!define MUI_ABORTWARNING
!define MUI_UNINSTALLER
!define MUI_UNCONFIRMPAGE
22 23 24 25 26 27 28 29 30
   !define MUI_FINISHPAGE_RUN
   !define MUI_FINISHPAGE_RUN_TEXT "Launch Ring"
   !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
31

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

37 38 39 40 41 42 43
!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}"

Edric Milaret's avatar
Edric Milaret committed
44
outFile "ring-windows-nightly.exe"
45 46 47 48

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

49 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
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"'

94 95 96 97 98 99 100 101 102 103
!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
104 105
!include x64.nsh

106 107 108
function .onInit
        setShellVarContext all
        !insertmacro VerifyUserIsAdmin
109 110 111 112 113 114
        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
115 116 117 118 119 120
        StrCpy $INSTDIR "$PROGRAMFILES\${COMPANYNAME}\${APPNAME}"
        ${If} ${ARCH} == "x64"
         ${If} ${RunningX64}
            StrCpy $INSTDIR "$PROGRAMFILES64\${COMPANYNAME}\${APPNAME}"
         ${EndIf}
        ${EndIf}
121
done:
122 123
functionEnd

124 125 126 127
Function LaunchLink
  ExecShell "" "$DESKTOP\Ring.lnk"
FunctionEnd

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

139 140 141
        # 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")
Edric Milaret's avatar
Edric Milaret committed
142
        file "Ring.exe"
143 144 145 146 147 148 149 150
        file "ring.ico"
        file *.dll
        setOutPath $INSTDIR\platforms
        file platforms/*
        setOutPath $INSTDIR\imageformats
        file imageformats/*
        setOutPath $INSTDIR\ringtones
        file ringtones/*
151 152 153 154
        setOutPath $INSTDIR\share\ring\translations
        file share/ring/translations/*
        setOutPath $INSTDIR\share\libringclient\translations
        file share/libringclient/translations/*
155 156 157 158

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

Edric Milaret's avatar
Edric Milaret committed
159
        SetOutPath $INSTDIR
160
        #Desktop
Edric Milaret's avatar
Edric Milaret committed
161
        CreateShortCut "$DESKTOP\Ring.lnk" "$INSTDIR\Ring.exe" ""
162 163 164

        # Start Menu
        createDirectory "$SMPROGRAMS\${COMPANYNAME}"
Edric Milaret's avatar
Edric Milaret committed
165
        createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" "$INSTDIR\Ring.exe" "" "$INSTDIR\ring.ico"
166 167 168 169 170

        # 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"
171
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" $INSTDIR
172 173 174 175 176 177 178 179 180 181 182 183 184 185
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayIcon" "$\"$INSTDIR\ring.ico$\""
        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"
Edric Milaret's avatar
Edric Milaret committed
186 187 188 189 190

        # Write ring protocol in registry
        WriteRegStr HKCR "ring" "URL Protocol" "$\"$\""
        WriteRegStr HKCR "ring\DefaultIcon" "" "$\"$INSTDIR\Ring.exe,1$\""
        WriteRegStr HKCR "ring\shell\open\command" "" "$\"$INSTDIR\Ring.exe$\" $\"%1$\""
191 192 193 194 195 196 197 198
sectionEnd

# Uninstaller

function un.onInit
        SetShellVarContext all

        #Verify the uninstaller - last chance to back out
199
        MessageBox MB_OKCANCEL "Permanently remove ${APPNAME}?" IDOK next
200 201 202 203 204
                Abort
        next:
        !insertmacro VerifyUserIsAdmin
functionEnd

205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
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

222 223 224 225 226 227 228 229
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
Edric Milaret's avatar
Edric Milaret committed
230
        delete $INSTDIR\Ring.exe
231 232 233 234 235
        delete $INSTDIR\ring.ico
        delete $INSTDIR\*.dll
        rmDir /r $INSTDIR\platforms
        rmDir /r $INSTDIR\imageformats
        rmDir /r $INSTDIR\ringtones
236
        rmDir /r $INSTDIR\share
237 238 239 240 241 242 243 244 245 246 247

        # 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