1035 lines
27 KiB
Plaintext
1035 lines
27 KiB
Plaintext
;--------------------------------
|
|
; Build environment
|
|
;--------------------------------
|
|
|
|
;Unicode true
|
|
;!define top_srcdir @top_srcdir@
|
|
;!define base_image_dir ""
|
|
;!define srcdir @srcdir@
|
|
!define VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}
|
|
!define VERSION_FULL ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}.0
|
|
;!define PUBLISHER "Status.im"
|
|
;!define WEBSITE_URL "https://status.im/"
|
|
!define AppUserModelId "StatusIm.Status.Desktop.1" ; app.id must match ID in modules/react-native-desktop-notification/desktop/desktopnotification.cpp
|
|
!define SnoreToastExe "$INSTDIR\SnoreToast.exe"
|
|
!define AppLinkFileName "Status.lnk"
|
|
!define AppExeName "Status.exe"
|
|
!define UninstallExeName "Uninstall.exe"
|
|
!define UninstallLinkName "Uninstall.lnk"
|
|
!define NodeJsServerExeName "ubuntu-server.exe"
|
|
!define SetupExeFileName "Status-x86_64-setup.exe"
|
|
!define OrgRegistryKeyPath "Software\${PUBLISHER}"
|
|
!define AppRegistryKeyPath "${OrgRegistryKeyPath}\Status Desktop"
|
|
!define UninstallRegKeyPath "Software\Microsoft\Windows\CurrentVersion\Uninstall\Status Desktop"
|
|
|
|
!addplugindir plugins/x86-ansi
|
|
|
|
;--------------------------------
|
|
;General
|
|
;--------------------------------
|
|
|
|
;Name and file
|
|
Name "Status Desktop ${VERSION}"
|
|
OutFile "${top_srcdir}/${SetupExeFileName}"
|
|
|
|
SetCompressor /FINAL ${COMPRESSION_TYPE} ${COMPRESSION_ALGO}
|
|
|
|
; Default installation folder
|
|
InstallDir "$PROGRAMFILES64\${PUBLISHER}"
|
|
|
|
; Get installation folder from registry if available
|
|
InstallDirRegKey HKLM "${AppRegistryKeyPath}" ""
|
|
|
|
RequestExecutionLevel user
|
|
|
|
!define DUMP_KEY "SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"
|
|
|
|
;--------------------------------
|
|
; Include Modern UI and functions
|
|
;--------------------------------
|
|
|
|
!include "MUI2.nsh"
|
|
!include "WordFunc.nsh"
|
|
!include "Library.nsh"
|
|
!include "WinVer.nsh"
|
|
!include "FileFunc.nsh"
|
|
; !include "Memento.nsh"
|
|
!include "StrFunc.nsh"
|
|
!include "include/UAC.nsh"
|
|
!include "include/SnoreNotify.nsh"
|
|
!include "include/nsProcess.nsh"
|
|
|
|
${StrRep}
|
|
|
|
;--------------------------------
|
|
; Installer's VersionInfo
|
|
;--------------------------------
|
|
|
|
VIProductVersion "${VERSION_FULL}"
|
|
VIAddVersionKey "CompanyName" "${PUBLISHER}"
|
|
VIAddVersionKey "ProductName" "Status Desktop"
|
|
VIAddVersionKey "ProductVersion" "${VERSION}"
|
|
VIAddVersionKey "FileDescription" "Status Desktop Client"
|
|
VIAddVersionKey "FileVersion" "${VERSION}"
|
|
VIAddVersionKey "LegalCopyright" "${PUBLISHER}"
|
|
VIAddVersionKey "OriginalFilename" "${SetupExeFileName}"
|
|
|
|
;--------------------------------
|
|
; Required functions
|
|
;--------------------------------
|
|
|
|
!insertmacro GetParameters
|
|
!insertmacro GetOptions
|
|
!insertmacro un.GetParameters
|
|
!insertmacro un.GetOptions
|
|
|
|
;--------------------------------
|
|
;Variables
|
|
;--------------------------------
|
|
|
|
Var MUI_TEMP
|
|
Var STARTMENU_FOLDER
|
|
Var PREVIOUS_INSTALLDIR
|
|
Var PREVIOUS_VERSION
|
|
Var PREVIOUS_VERSION_STATE
|
|
Var REINSTALL_UNINSTALL
|
|
Var ALL_USERS_DEFAULT
|
|
Var ALL_USERS
|
|
Var IS_ADMIN
|
|
Var USERNAME
|
|
Var PERFORM_UPDATE
|
|
Var SKIPLICENSE
|
|
Var SKIPUAC
|
|
Var GetInstalledSize.total
|
|
Var OldRunDir
|
|
Var CommandLine
|
|
Var Quiet
|
|
|
|
;--------------------------------
|
|
;Interface Settings
|
|
;--------------------------------
|
|
|
|
!define MUI_ICON "${top_srcdir}/deployment/windows/status.ico"
|
|
;!define MUI_UNICON "${srcdir}/uninstall.ico"
|
|
|
|
!define MUI_ABORTWARNING
|
|
|
|
;--------------------------------
|
|
;Memento settings
|
|
;--------------------------------
|
|
|
|
;!define MEMENTO_REGISTRY_ROOT SHELL_CONTEXT
|
|
;!define MEMENTO_REGISTRY_KEY "${AppRegistryKeyPath}"
|
|
|
|
;--------------------------------
|
|
;Pages
|
|
|
|
!define MUI_PAGE_CUSTOMFUNCTION_PRE PageDirectoryPre
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
|
|
; Start Menu Folder Page Configuration
|
|
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${AppRegistryKeyPath}"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Startmenu"
|
|
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Status Desktop"
|
|
|
|
!define MUI_PAGE_CUSTOMFUNCTION_PRE PageStartmenuPre
|
|
!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
|
|
|
|
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE PostInstPage
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
|
|
!define MUI_PAGE_CUSTOMFUNCTION_PRE un.ConfirmPagePre
|
|
!insertmacro MUI_UNPAGE_CONFIRM
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
!define MUI_PAGE_CUSTOMFUNCTION_PRE un.FinishPagePre
|
|
!insertmacro MUI_UNPAGE_FINISH
|
|
|
|
Function GetUserInfo
|
|
ClearErrors
|
|
UserInfo::GetName
|
|
${If} ${Errors}
|
|
StrCpy $IS_ADMIN 1
|
|
Return
|
|
${EndIf}
|
|
Pop $USERNAME
|
|
|
|
${If} ${UAC_IsAdmin}
|
|
StrCpy $IS_ADMIN 1
|
|
${Else}
|
|
StrCpy $IS_ADMIN 0
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function UpdateShellVarContext
|
|
|
|
${If} $ALL_USERS == 1
|
|
SetShellVarContext all
|
|
DetailPrint "Installing for all users"
|
|
${Else}
|
|
SetShellVarContext current
|
|
DetailPrint "Installing for current user"
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
!Macro MessageBoxImpl options text sdreturn checks
|
|
${If} $Quiet == 1
|
|
MessageBox ${options} `${text}` ${checks}
|
|
${Else}
|
|
MessageBox ${options} `${text}` /SD ${sdreturn} ${checks}
|
|
${Endif}
|
|
|
|
!MacroEnd
|
|
|
|
!define MessageBox `!insertmacro MessageBoxImpl`
|
|
|
|
Function ReadAllUsersCommandline
|
|
|
|
${GetOptions} $CommandLine "/user" $R1
|
|
|
|
${Unless} ${Errors}
|
|
${If} $R1 == "current"
|
|
${OrIf} $R1 == "=current"
|
|
StrCpy $ALL_USERS 0
|
|
${ElseIf} $R1 == "all"
|
|
${OrIf} $R1 == "=all"
|
|
StrCpy $ALL_USERS 1
|
|
${Else}
|
|
${MessageBox} MB_ICONSTOP "Invalid option for /user. Has to be either /user=all or /user=current" IDOK ''
|
|
Abort
|
|
${EndIf}
|
|
${EndUnless}
|
|
Call UpdateShellVarContext
|
|
|
|
FunctionEnd
|
|
|
|
Function CheckPrevInstallDirExists
|
|
|
|
${If} $PREVIOUS_INSTALLDIR != ""
|
|
|
|
; Make sure directory is valid
|
|
Push $R0
|
|
Push $R1
|
|
StrCpy $R0 "$PREVIOUS_INSTALLDIR" "" -1
|
|
${If} $R0 == '\'
|
|
${OrIf} $R0 == '/'
|
|
StrCpy $R0 $PREVIOUS_INSTALLDIR*.*
|
|
${Else}
|
|
StrCpy $R0 $PREVIOUS_INSTALLDIR\*.*
|
|
${EndIf}
|
|
${IfNot} ${FileExists} $R0
|
|
StrCpy $PREVIOUS_INSTALLDIR ""
|
|
${EndIf}
|
|
Pop $R1
|
|
Pop $R0
|
|
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function ReadPreviousVersion
|
|
|
|
ReadRegStr $PREVIOUS_INSTALLDIR HKLM "${AppRegistryKeyPath}" ""
|
|
|
|
Call CheckPrevInstallDirExists
|
|
|
|
${If} $PREVIOUS_INSTALLDIR != ""
|
|
; Detect version
|
|
ReadRegStr $PREVIOUS_VERSION HKLM "${AppRegistryKeyPath}" "Version"
|
|
${If} $PREVIOUS_VERSION != ""
|
|
StrCpy $ALL_USERS 1
|
|
SetShellVarContext all
|
|
return
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
ReadRegStr $PREVIOUS_INSTALLDIR HKCU "${AppRegistryKeyPath}" ""
|
|
|
|
Call CheckPrevInstallDirExists
|
|
|
|
${If} $PREVIOUS_INSTALLDIR != ""
|
|
; Detect version
|
|
ReadRegStr $PREVIOUS_VERSION HKCU "${AppRegistryKeyPath}" "Version"
|
|
${If} $PREVIOUS_VERSION != ""
|
|
StrCpy $ALL_USERS 0
|
|
SetShellVarContext current
|
|
return
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function LoadPreviousSettings
|
|
|
|
; Component selection
|
|
;${MementoSectionRestore}
|
|
|
|
; Startmenu
|
|
!define ID "Application"
|
|
|
|
!ifdef MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME
|
|
|
|
ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME}"
|
|
|
|
${if} $mui.StartMenuPage.RegistryLocation != ""
|
|
StrCpy "$STARTMENU_FOLDER" $mui.StartMenuPage.RegistryLocation
|
|
${else}
|
|
StrCpy "$STARTMENU_FOLDER" ""
|
|
${endif}
|
|
|
|
!undef ID
|
|
|
|
!endif
|
|
|
|
${If} $PREVIOUS_INSTALLDIR != ""
|
|
StrCpy $INSTDIR $PREVIOUS_INSTALLDIR
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function ReadUpdateCommandline
|
|
|
|
${GetOptions} $CommandLine "/update" $R1
|
|
|
|
${If} ${Errors}
|
|
StrCpy $PERFORM_UPDATE 0
|
|
${Else}
|
|
StrCpy $PERFORM_UPDATE 1
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function ReadSkipLicense
|
|
|
|
${GetOptions} $CommandLine "/skiplicense" $R1
|
|
|
|
${If} ${Errors}
|
|
StrCpy $SKIPLICENSE 0
|
|
${Else}
|
|
StrCpy $SKIPLICENSE 1
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function ReadSkipUAC
|
|
|
|
${GetOptions} $CommandLine "/skipuac" $R1
|
|
|
|
${If} ${Errors}
|
|
StrCpy $SKIPUAC 0
|
|
${Else}
|
|
StrCpy $SKIPUAC 1
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function ReadQuiet
|
|
|
|
${GetOptions} $CommandLine "/quiet" $R1
|
|
|
|
${If} ${Errors}
|
|
StrCpy $Quiet 0
|
|
${Else}
|
|
StrCpy $Quiet 1
|
|
SetSilent silent
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function .onInit
|
|
|
|
Pop $OldRunDir
|
|
|
|
; Store command line
|
|
${GetParameters} $CommandLine
|
|
|
|
Call ReadQuiet
|
|
|
|
${Unless} ${AtLeastWin7}
|
|
${MessageBox} MB_YESNO|MB_ICONSTOP "Unsupported operating system.$\nStatus Desktop ${VERSION} requires at least Windows 7 and may not work correctly on your system.$\nDo you really want to continue with the installation?" IDNO 'IDYES installonoldwindows'
|
|
Abort
|
|
installonoldwindows:
|
|
${EndUnless}
|
|
${Unless} ${RunningX64}
|
|
${MessageBox} MB_OK|MB_ICONSTOP "Unsupported operating system.$\nThis is the installer for the 64bit version of Status Desktop ${VERSION} and does not run on your operating system which is only 32bit." IDOK ''
|
|
Abort
|
|
${EndUnless}
|
|
|
|
Call ReadSkipUAC
|
|
|
|
${If} $SKIPUAC != 1
|
|
uac_tryagain:
|
|
!insertmacro UAC_RunElevated
|
|
|
|
${Switch} $0
|
|
${Case} 0
|
|
${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done.
|
|
${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
|
|
${If} $2 = 3 ;RunAs completed successfully, but with a non-admin user
|
|
MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND "Status Desktop setup requires admin privileges, try again" /SD IDNO IDYES uac_tryagain IDNO 0
|
|
${EndIf}
|
|
;fall-through and die
|
|
${Case} 1223
|
|
; User aborted elevation, continue regardless
|
|
${Break}
|
|
${Default}
|
|
${MessageBox} mb_iconstop "Could not elevate process (errorcode $0), continuing with normal user privileges." IDOK ''
|
|
${Break}
|
|
${EndSwitch}
|
|
|
|
; The UAC plugin changes the error level even in the inner process, reset it.
|
|
SetErrorLevel -1
|
|
${EndIf}
|
|
|
|
; /update argument
|
|
Call ReadUpdateCommandline
|
|
|
|
Call ReadSkipLicense
|
|
|
|
Call GetUserInfo
|
|
|
|
; Initialize $ALL_USERS with default value
|
|
${If} $IS_ADMIN == 1
|
|
StrCpy $ALL_USERS 1
|
|
${Else}
|
|
StrCpy $ALL_USERS 0
|
|
${EndIf}
|
|
Call UpdateShellVarContext
|
|
|
|
; See if previous version exists
|
|
; This can change ALL_USERS
|
|
Call ReadPreviousVersion
|
|
|
|
${If} $PREVIOUS_VERSION != ""
|
|
StrCpy $REINSTALL_UNINSTALL 1
|
|
${EndIf}
|
|
|
|
; Load _all_ previous settings.
|
|
; Need to do it now as up to now, $ALL_USERS was possibly reflecting a
|
|
; previous installation. After this call, $ALL_USERS reflects the requested
|
|
; installation mode for this installation.
|
|
Call LoadPreviousSettings
|
|
|
|
Call ReadAllUsersCommandline
|
|
|
|
${If} $ALL_USERS == 1
|
|
${If} $IS_ADMIN == 0
|
|
|
|
${If} $PREVIOUS_VERSION != ""
|
|
${MessageBox} MB_ICONSTOP "Status Desktop has been previously installed for all users.$\nPlease restart the installer with Administrator privileges." IDOK ''
|
|
Abort
|
|
${Else}
|
|
${MessageBox} MB_ICONSTOP "Cannot install for all users.$\nPlease restart the installer with Administrator privileges." IDOK ''
|
|
Abort
|
|
${EndIf}
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
${If} $PREVIOUS_VERSION == ""
|
|
|
|
StrCpy $PERFORM_UPDATE 0
|
|
DetailPrint "No previous version of Status Desktop was found"
|
|
|
|
${Else}
|
|
|
|
Push "${VERSION}"
|
|
Push $PREVIOUS_VERSION
|
|
Call StatusVersionCompare
|
|
|
|
DetailPrint "Found previous version: $PREVIOUS_VERSION"
|
|
DetailPrint "Installing $PREVIOUS_VERSION_STATE version ${VERSION}"
|
|
|
|
${EndIf}
|
|
|
|
StrCpy $ALL_USERS_DEFAULT $ALL_USERS
|
|
|
|
FunctionEnd
|
|
|
|
Function StatusVersionCompare
|
|
|
|
Exch $1
|
|
Exch
|
|
Exch $0
|
|
|
|
Push $2
|
|
Push $3
|
|
Push $4
|
|
|
|
versioncomparebegin:
|
|
${If} $0 == ""
|
|
${AndIf} $1 == ""
|
|
StrCpy $PREVIOUS_VERSION_STATE "same"
|
|
goto versioncomparedone
|
|
${EndIf}
|
|
|
|
StrCpy $2 0
|
|
StrCpy $3 0
|
|
|
|
; Parse rc / beta suffixes for segments
|
|
StrCpy $4 $0 2
|
|
${If} $4 == "rc"
|
|
StrCpy $2 100
|
|
StrCpy $0 $0 "" 2
|
|
${Else}
|
|
StrCpy $4 $0 4
|
|
${If} $4 == "beta"
|
|
StrCpy $0 $0 "" 4
|
|
${Else}
|
|
StrCpy $2 10000
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
StrCpy $4 $1 2
|
|
${If} $4 == "rc"
|
|
StrCpy $3 100
|
|
StrCpy $1 $1 "" 2
|
|
${Else}
|
|
StrCpy $4 $1 4
|
|
${If} $4 == "beta"
|
|
StrCpy $1 $1 "" 4
|
|
${Else}
|
|
StrCpy $3 10000
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
split1loop:
|
|
|
|
StrCmp $0 "" split1loopdone
|
|
StrCpy $4 $0 1
|
|
StrCpy $0 $0 "" 1
|
|
StrCmp $4 "." split1loopdone
|
|
StrCmp $4 "-" split1loopdone
|
|
StrCpy $2 $2$4
|
|
goto split1loop
|
|
split1loopdone:
|
|
|
|
split2loop:
|
|
|
|
StrCmp $1 "" split2loopdone
|
|
StrCpy $4 $1 1
|
|
StrCpy $1 $1 "" 1
|
|
StrCmp $4 "." split2loopdone
|
|
StrCmp $4 "-" split2loopdone
|
|
StrCpy $3 $3$4
|
|
goto split2loop
|
|
split2loopdone:
|
|
|
|
${If} $2 > $3
|
|
StrCpy $PREVIOUS_VERSION_STATE "newer"
|
|
${ElseIf} $3 > $2
|
|
StrCpy $PREVIOUS_VERSION_STATE "older"
|
|
${Else}
|
|
goto versioncomparebegin
|
|
${EndIf}
|
|
|
|
|
|
versioncomparedone:
|
|
|
|
Pop $4
|
|
Pop $3
|
|
Pop $2
|
|
Pop $1
|
|
Pop $0
|
|
|
|
FunctionEnd
|
|
|
|
Function PageDirectoryPre
|
|
|
|
${If} $PERFORM_UPDATE == 1
|
|
Abort
|
|
${EndIf}
|
|
|
|
${If} $REINSTALL_UNINSTALL == "1"
|
|
${AndIf} $PREVIOUS_VERSION_STATE != "same"
|
|
|
|
Abort
|
|
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function PageStartmenuPre
|
|
|
|
${If} $PERFORM_UPDATE == 1
|
|
Abort
|
|
${EndIf}
|
|
|
|
${If} $REINSTALL_UNINSTALL == "1"
|
|
${AndIf} $PREVIOUS_VERSION_STATE != "same"
|
|
|
|
${If} "$STARTMENU_FOLDER" == ""
|
|
|
|
StrCpy "$STARTMENU_FOLDER" ">"
|
|
|
|
${EndIf}
|
|
|
|
Abort
|
|
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function .OnInstFailed
|
|
FunctionEnd
|
|
|
|
Function .onInstSuccess
|
|
|
|
;${MementoSectionSave}
|
|
|
|
|
|
; Detect multiple install directories
|
|
${If} $OldRunDir != ''
|
|
${GetFileVersion} $OldRunDir $R0
|
|
${GetFileVersion} "$INSTDIR\${AppExeName}" $R1
|
|
|
|
StrCpy $R2 $OldRunDir -14
|
|
|
|
${If} $R0 != ''
|
|
${AndIf} $R1 != ''
|
|
${AndIf} $R0 != $R1
|
|
${MessageBox} MB_ICONEXCLAMATION 'Multiple installations of Status Desktop detected.$\n$\nStatus Desktop ${VERSION} has been installed to "$InstDir".$\nAn old installation of Status Desktop $R0 still exists in the "$R2" directory.$\n$\nPlease delete the old version in the "$R2" directory.' IDOK ''
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
;--------------------------------
|
|
; Languages
|
|
;--------------------------------
|
|
|
|
!insertmacro MUI_LANGUAGE "English"
|
|
|
|
;--------------------------------
|
|
;Installer Sections
|
|
;--------------------------------
|
|
|
|
Section "Status Desktop" SecMain
|
|
|
|
;SectionIn 1 RO
|
|
|
|
${nsProcess::FindProcess} "${NodeJsServerExeName}" $R0
|
|
|
|
${If} $R0 == 0
|
|
DetailPrint "${NodeJsServerExeName} is running. Closing it down"
|
|
${nsProcess::CloseProcess} "${NodeJsServerExeName}" $R0
|
|
DetailPrint "Waiting for ${NodeJsServerExeName} to close"
|
|
Sleep 2000
|
|
${Else}
|
|
DetailPrint "${NodeJsServerExeName} was not found to be running"
|
|
${EndIf}
|
|
|
|
${nsProcess::Unload}
|
|
|
|
SetOutPath "$INSTDIR"
|
|
|
|
File "${top_srcdir}\.env"
|
|
File "${top_srcdir}\node_modules\node-notifier\vendor\snoreToast\SnoreToast.exe"
|
|
File /r "${top_srcdir}\desktop\bin\"
|
|
File /r "${base_image_dir}\"
|
|
|
|
SetOutPath "$INSTDIR\notifier"
|
|
File "${top_srcdir}\node_modules\node-notifier\vendor\notifu\*.exe"
|
|
|
|
SetOutPath "$INSTDIR\assets\resources\fonts"
|
|
File /r "${top_srcdir}\resources\fonts\"
|
|
|
|
SetOutPath "$INSTDIR\assets\resources\icons"
|
|
File /r "${top_srcdir}\resources\icons\"
|
|
|
|
SetOutPath "$INSTDIR\assets\resources\images"
|
|
File /r "${top_srcdir}\resources\images\"
|
|
|
|
;Create uninstaller
|
|
WriteUninstaller "$INSTDIR\${UninstallExeName}"
|
|
|
|
WriteRegStr SHCTX "${AppRegistryKeyPath}" "" $INSTDIR
|
|
WriteRegStr SHCTX "${AppRegistryKeyPath}" "Version" "${VERSION}"
|
|
|
|
WriteRegDWORD SHCTX "${AppRegistryKeyPath}" "Updated" $PERFORM_UPDATE
|
|
|
|
${StrRep} $R0 "$INSTDIR\${UninstallExeName}" '"' '""'
|
|
WriteRegExpandStr SHCTX "${UninstallRegKeyPath}" "UninstallString" '"$R0"'
|
|
WriteRegExpandStr SHCTX "${UninstallRegKeyPath}" "InstallLocation" "$INSTDIR"
|
|
WriteRegStr SHCTX "${UninstallRegKeyPath}" "DisplayName" "Status Desktop ${VERSION}"
|
|
WriteRegStr SHCTX "${UninstallRegKeyPath}" "DisplayIcon" "$INSTDIR\${AppExeName}"
|
|
WriteRegStr SHCTX "${UninstallRegKeyPath}" "DisplayVersion" "${VERSION}"
|
|
WriteRegStr SHCTX "${UninstallRegKeyPath}" "URLInfoAbout" "${WEBSITE_URL}"
|
|
WriteRegStr SHCTX "${UninstallRegKeyPath}" "URLUpdateInfo" "${WEBSITE_URL}"
|
|
WriteRegStr SHCTX "${UninstallRegKeyPath}" "HelpLink" "${WEBSITE_URL}"
|
|
WriteRegStr SHCTX "${UninstallRegKeyPath}" "Publisher" "${PUBLISHER}"
|
|
WriteRegDWORD SHCTX "${UninstallRegKeyPath}" "VersionMajor" "${VERSION_MAJOR}"
|
|
WriteRegDWORD SHCTX "${UninstallRegKeyPath}" "VersionMinor" "${VERSION_MINOR}"
|
|
WriteRegDWORD SHCTX "${UninstallRegKeyPath}" "NoModify" "1"
|
|
WriteRegDWORD SHCTX "${UninstallRegKeyPath}" "NoRepair" "1"
|
|
|
|
Call GetInstalledSize
|
|
WriteRegDWORD SHCTX "${UninstallRegKeyPath}" "EstimatedSize" "$GetInstalledSize.total" ; Create/Write the reg key with the dword value
|
|
|
|
;Add applications to the firewall exception list - All Networks - All IP Version - Enabled
|
|
SimpleFC::IsApplicationAdded "$INSTDIR\${AppExeName}"
|
|
Pop $0 ; return error(1)/success(0)
|
|
${if} $0 == "0"
|
|
Pop $1 ; return 1=Added/0=Not added
|
|
${if} $1 == "0"
|
|
; SimpleFC::AddApplication [name] [path] [scope] [ip_version] [remote_addresses] [status]
|
|
SimpleFC::AddApplication "Status Desktop Ethereum Node" "$INSTDIR\${AppExeName}" 0 2 "" 1
|
|
SimpleFC::AddApplication "Status Desktop Node.js Server" "$INSTDIR\${NodeJsServerExeName}" 1 2 "" 1
|
|
${endif}
|
|
${endif}
|
|
|
|
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
|
|
|
;Create shortcuts
|
|
SetOutPath "$INSTDIR"
|
|
CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
|
|
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\${UninstallLinkName}" "$INSTDIR\${UninstallExeName}"
|
|
|
|
;CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\${AppLinkFileName}" "$INSTDIR\${AppExeName}"
|
|
!insertmacro SnoreShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\${AppLinkFileName}" "$INSTDIR\${AppExeName}" "${AppUserModelId}"
|
|
|
|
!insertmacro MUI_STARTMENU_WRITE_END
|
|
|
|
; Push $R0
|
|
; StrCpy $R0 "$STARTMENU_FOLDER" 1
|
|
; ${if} $R0 == ">"
|
|
; ;Write folder to registry
|
|
; WriteRegStr "${MUI_STARTMENUPAGE_Application_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_Application_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_Application_REGISTRY_VALUENAME}" ">"
|
|
; ${endif}
|
|
; Pop $R0
|
|
|
|
${If} $ALL_USERS == 1
|
|
; Enable mini dumps
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
WriteRegDWORD HKLM "${DUMP_KEY}\${AppExeName}" "DumpType" "1"
|
|
WriteRegDWORD HKLM "${DUMP_KEY}\${NodeJsServerExeName}" "DumpType" "1"
|
|
${If} ${RunningX64}
|
|
SetRegView lastused
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
; Register App Path so that typing status in Win+R dialog starts Status Desktop
|
|
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\App Paths\${AppExeName}" "" "$INSTDIR\${AppExeName}"
|
|
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\App Paths\${AppExeName}" "Path" "$INSTDIR"
|
|
|
|
SectionEnd
|
|
|
|
;--------------------------------
|
|
; Functions
|
|
;--------------------------------
|
|
|
|
Function PostInstPage
|
|
|
|
; Don't advance automatically if details expanded
|
|
FindWindow $R0 "#32770" "" $HWNDPARENT
|
|
GetDlgItem $R0 $R0 1016
|
|
System::Call user32::IsWindowVisible(i$R0)i.s
|
|
Pop $R0
|
|
|
|
${If} $R0 != 0
|
|
SetAutoClose false
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function GetInstalledSize
|
|
Push $0
|
|
Push $1
|
|
StrCpy $GetInstalledSize.total 0
|
|
${ForEach} $1 0 256 + 1
|
|
${if} ${SectionIsSelected} $1
|
|
SectionGetSize $1 $0
|
|
IntOp $GetInstalledSize.total $GetInstalledSize.total + $0
|
|
${Endif}
|
|
${Next}
|
|
Pop $1
|
|
Pop $0
|
|
IntFmt $GetInstalledSize.total "0x%08X" $GetInstalledSize.total
|
|
Push $GetInstalledSize.total
|
|
FunctionEnd
|
|
|
|
;--------------------------------
|
|
; Descriptions
|
|
;--------------------------------
|
|
|
|
; Language strings
|
|
LangString DESC_SecMain ${LANG_ENGLISH} "Required program files."
|
|
;LangString DESC_SecDesktop ${LANG_ENGLISH} "Create desktop icon for FileZilla"
|
|
|
|
; Assign language strings to sections
|
|
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SecMain} $(DESC_SecMain)
|
|
;!insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} $(DESC_SecDesktop)
|
|
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
|
|
|
;--------------------------------
|
|
; Uninstaller Variables
|
|
;--------------------------------
|
|
|
|
Var un.REMOVE_ALL_USERS
|
|
Var un.REMOVE_CURRENT_USER
|
|
|
|
;--------------------------------
|
|
;Uninstaller Functions
|
|
;--------------------------------
|
|
|
|
Function un.GetUserInfo
|
|
ClearErrors
|
|
UserInfo::GetName
|
|
${If} ${Errors}
|
|
StrCpy $IS_ADMIN 1
|
|
Return
|
|
${EndIf}
|
|
Pop $USERNAME
|
|
|
|
${If} ${UAC_IsAdmin}
|
|
StrCpy $IS_ADMIN 1
|
|
${Else}
|
|
StrCpy $IS_ADMIN 0
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function un.ReadPreviousVersion
|
|
|
|
ReadRegStr $R0 HKLM "${AppRegistryKeyPath}" ""
|
|
|
|
${If} $R0 != ""
|
|
;Detect version
|
|
ReadRegStr $R2 HKLM "${AppRegistryKeyPath}" "Version"
|
|
${If} $R2 == ""
|
|
StrCpy $R0 ""
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
ReadRegStr $R1 HKCU "${AppRegistryKeyPath}" ""
|
|
|
|
${If} $R1 != ""
|
|
;Detect version
|
|
ReadRegStr $R2 HKCU "${AppRegistryKeyPath}" "Version"
|
|
${If} $R2 == ""
|
|
StrCpy $R1 ""
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
${If} $R1 == $INSTDIR
|
|
Strcpy $un.REMOVE_CURRENT_USER 1
|
|
${EndIf}
|
|
${If} $R0 == $INSTDIR
|
|
Strcpy $un.REMOVE_ALL_USERS 1
|
|
${EndIf}
|
|
${If} $un.REMOVE_CURRENT_USER != 1
|
|
${AndIf} $un.REMOVE_ALL_USERS != 1
|
|
${If} $R1 != ""
|
|
Strcpy $un.REMOVE_CURRENT_USER 1
|
|
${If} $R0 == $R1
|
|
Strcpy $un.REMOVE_ALL_USERS 1
|
|
${EndIf}
|
|
${Else}
|
|
StrCpy $un.REMOVE_ALL_USERS = 1
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function un.onInit
|
|
|
|
${un.GetParameters} $CommandLine
|
|
|
|
${un.GetOptions} $CommandLine "/quiet" $R1
|
|
${If} ${Errors}
|
|
StrCpy $Quiet 0
|
|
${Else}
|
|
StrCpy $Quiet 1
|
|
SetSilent silent
|
|
${EndIf}
|
|
|
|
Call un.GetUserInfo
|
|
Call un.ReadPreviousVersion
|
|
|
|
${If} $un.REMOVE_ALL_USERS == 1
|
|
${AndIf} $IS_ADMIN == 0
|
|
uac_tryagain:
|
|
!insertmacro UAC_RunElevated
|
|
|
|
${Switch} $0
|
|
${Case} 0
|
|
${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done.
|
|
${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
|
|
${If} $2 = 3 ;RunAs completed successfully, but with a non-admin user
|
|
MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND "Status Desktop setup requires admin privileges, try again" /SD IDNO IDYES uac_tryagain IDNO 0
|
|
Abort
|
|
${EndIf}
|
|
;fall-through and die
|
|
${Default}
|
|
${MessageBox} MB_ICONSTOP "Status Desktop has been installed for all users.$\nPlease restart the uninstaller with Administrator privileges to remove it." IDOK ''
|
|
Abort
|
|
${EndSwitch}
|
|
|
|
; The UAC plugin changes the error level even in the inner process, reset it.
|
|
SetErrorLevel -1
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
Function un.RemoveStartmenu
|
|
|
|
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
|
|
|
Delete "$SMPROGRAMS\$MUI_TEMP\${UninstallLinkName}"
|
|
Delete "$SMPROGRAMS\$MUI_TEMP\${AppLinkFileName}"
|
|
|
|
${un.GetOptions} $CommandLine "/keepstartmenudir" $R1
|
|
${If} ${Errors}
|
|
|
|
; Delete empty start menu parent diretories
|
|
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
|
|
|
|
startMenuDeleteLoop:
|
|
RMDir $MUI_TEMP
|
|
GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
|
|
|
|
IfErrors startMenuDeleteLoopDone
|
|
|
|
StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
|
|
startMenuDeleteLoopDone:
|
|
|
|
${EndUnless}
|
|
|
|
FunctionEnd
|
|
|
|
Function un.ConfirmPagePre
|
|
|
|
${un.GetOptions} $CommandLine "/frominstall" $R1
|
|
${Unless} ${Errors}
|
|
Abort
|
|
${EndUnless}
|
|
|
|
FunctionEnd
|
|
|
|
Function un.FinishPagePre
|
|
|
|
${un.GetOptions} $CommandLine "/frominstall" $R1
|
|
${Unless} ${Errors}
|
|
SetRebootFlag false
|
|
Abort
|
|
${EndUnless}
|
|
|
|
FunctionEnd
|
|
|
|
;--------------------------------
|
|
; Uninstaller Section
|
|
;--------------------------------
|
|
|
|
Section "Uninstall"
|
|
|
|
SetShellVarContext all
|
|
|
|
SetDetailsPrint lastused
|
|
|
|
${nsProcess::FindProcess} "${AppExeName}" $R0
|
|
|
|
${If} $R0 == 0
|
|
DetailPrint "${AppExeName} is running. Closing it down"
|
|
${nsProcess::CloseProcess} "${AppExeName}" $R0
|
|
DetailPrint "Waiting for ${AppExeName} to close"
|
|
Sleep 2000
|
|
${Else}
|
|
DetailPrint "${AppExeName} was not found to be running"
|
|
${EndIf}
|
|
|
|
${nsProcess::FindProcess} "${NodeJsServerExeName}" $R0
|
|
|
|
${If} $R0 == 0
|
|
DetailPrint "${NodeJsServerExeName} is running. Closing it down"
|
|
${nsProcess::CloseProcess} "${NodeJsServerExeName}" $R0
|
|
DetailPrint "Waiting for ${NodeJsServerExeName} to close"
|
|
Sleep 2000
|
|
${Else}
|
|
DetailPrint "${NodeJsServerExeName} was not found to be running"
|
|
${EndIf}
|
|
|
|
${nsProcess::Unload}
|
|
|
|
SimpleFC::RemoveApplication "$INSTDIR\${AppExeName}"
|
|
SimpleFC::RemoveApplication "$INSTDIR\${NodeJsServerExeName}"
|
|
|
|
Delete "$INSTDIR\.env"
|
|
Delete "$INSTDIR\*.dll"
|
|
Delete "$INSTDIR\${AppExeName}"
|
|
Delete "$INSTDIR\reportApp.exe"
|
|
Delete "$INSTDIR\vc_redist.x64.exe"
|
|
Delete "$INSTDIR\${NodeJsServerExeName}"
|
|
Delete "$INSTDIR\${UninstallExeName}"
|
|
RMDir /r "$INSTDIR\assets"
|
|
Delete "$INSTDIR\bearer\*.dll"
|
|
RMDir "$INSTDIR\bearer"
|
|
Delete "$INSTDIR\iconengines\*.dll"
|
|
RMDir "$INSTDIR\iconengines"
|
|
Delete "$INSTDIR\imageformats\*.dll"
|
|
RMDir "$INSTDIR\imageformats"
|
|
RMDir /r "$INSTDIR\node_modules"
|
|
Delete "$INSTDIR\notifier\*.exe"
|
|
RMDir "$INSTDIR\notifier"
|
|
Delete "$INSTDIR\platforms\*.dll"
|
|
RMDir "$INSTDIR\platforms"
|
|
RMDir /r "$INSTDIR\QtGraphicalEffects"
|
|
RMDir /r "$INSTDIR\QtQml"
|
|
RMDir /r "$INSTDIR\QtQuick"
|
|
RMDir /r "$INSTDIR\QtQuick.2"
|
|
RMDir /r "$INSTDIR\QtWebSockets"
|
|
Delete "$INSTDIR\styles\*.dll"
|
|
RMDir "$INSTDIR\styles"
|
|
Delete "$INSTDIR\translations\*.qm"
|
|
RMDir "$INSTDIR\translations"
|
|
|
|
Delete "$INSTDIR"
|
|
|
|
${un.GetOptions} $CommandLine "/frominstall" $R1
|
|
${If} ${Errors}
|
|
RMDir /r /REBOOTOK "$INSTDIR"
|
|
|
|
DeleteRegValue SHCTX "${AppRegistryKeyPath}" "Package"
|
|
DeleteRegValue SHCTX "${AppRegistryKeyPath}" "Updated"
|
|
DeleteRegValue SHCTX "${AppRegistryKeyPath}" "Channel"
|
|
${EndIf}
|
|
|
|
${If} $un.REMOVE_ALL_USERS == 1
|
|
SetShellVarContext all
|
|
Call un.RemoveStartmenu
|
|
|
|
DeleteRegKey /ifempty HKLM "${AppRegistryKeyPath}"
|
|
DeleteRegKey /ifempty HKLM "${OrgRegistryKeyPath}"
|
|
DeleteRegKey HKLM "${UninstallRegKeyPath}"
|
|
|
|
Delete "$DESKTOP\${AppLinkFileName}"
|
|
|
|
; Remove dump key
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
DeleteRegValue HKLM "${DUMP_KEY}\${AppExeName}" "DumpType"
|
|
DeleteRegValue HKLM "${DUMP_KEY}\${NodeJsServerExeName}" "DumpType"
|
|
${If} ${RunningX64}
|
|
SetRegView lastused
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
${If} $un.REMOVE_CURRENT_USER == 1
|
|
SetShellVarContext current
|
|
Call un.RemoveStartmenu
|
|
|
|
DeleteRegKey /ifempty HKCU "${AppRegistryKeyPath}"
|
|
DeleteRegKey /ifempty HKCU "${OrgRegistryKeyPath}"
|
|
DeleteRegKey HKCU "${UninstallRegKeyPath}"
|
|
|
|
Delete "$DESKTOP\${AppLinkFileName}"
|
|
${EndIf}
|
|
|
|
DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\App Paths\${AppExeName}"
|
|
|
|
SectionEnd
|