ring.nsi 9.01 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}"

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
        file "ring.ico"
        file *.dll
        setOutPath $INSTDIR\platforms
        file platforms/*
        setOutPath $INSTDIR\imageformats
        file imageformats/*
149 150
        setOutPath $INSTDIR\sqldrivers
        file sqldrivers/*
151 152
        setOutPath $INSTDIR\ringtones
        file ringtones/*
153 154 155 156
        setOutPath $INSTDIR\share\ring\translations
        file share/ring/translations/*
        setOutPath $INSTDIR\share\libringclient\translations
        file share/libringclient/translations/*
157 158 159 160

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

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

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

        # 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"
173
        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" $INSTDIR
174 175 176 177 178 179 180 181 182 183 184 185 186 187
        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"
188 189 190 191 192

        # 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$\""
193 194 195 196 197 198 199 200
sectionEnd

# Uninstaller

function un.onInit
        SetShellVarContext all

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

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

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

        # 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