2018-11-05 10:40:11 +01:00
;--------------------------------
; Build environment
;--------------------------------
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
;Unicode true
;!define top_srcdir @top_srcdir@
2019-03-21 17:56:22 +01:00
;!define base_image_dir ""
2018-11-05 10:40:11 +01:00
;!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
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
;--------------------------------
;General
;--------------------------------
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
;Name and file
Name " Status Desktop ${VERSION} "
OutFile " ${top_srcdir}/${SetupExeFileName} "
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
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
;--------------------------------
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
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
;--------------------------------
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
!define MUI_ICON " ${top_srcdir}/deployment/windows/status.ico "
;!define MUI_UNICON "${srcdir}/uninstall.ico"
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
!define MUI_ABORTWARNING
;--------------------------------
;Memento settings
;--------------------------------
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
;!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}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
FunctionEnd
Function UpdateShellVarContext
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
${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
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
; Component selection
;${MementoSectionRestore}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
; Startmenu
!define ID " Application "
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
!ifdef MUI_STARTMENUPAGE_${ID} _REGISTRY_ROOT & MUI_STARTMENUPAGE_${ID} _REGISTRY_KEY & MUI_STARTMENUPAGE_${ID} _REGISTRY_VALUENAME
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
ReadRegStr $mui .StartMenuPage.RegistryLocation " ${MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT} " " ${MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY} " " ${MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME} "
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
${if} $mui .StartMenuPage.RegistryLocation != " "
StrCpy " $STARTMENU _FOLDER " $mui .StartMenuPage.RegistryLocation
${else}
StrCpy " $STARTMENU _FOLDER " " "
${endif}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
!undef ID
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
!endif
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
${If} $PREVIOUS_INSTALLDIR != " "
StrCpy $INSTDIR $PREVIOUS_INSTALLDIR
${EndIf}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
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
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
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}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
; /update argument
Call ReadUpdateCommandline
Call ReadSkipLicense
Call GetUserInfo
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
; Initialize $ALL_USERS with default value
${If} $IS_ADMIN == 1
StrCpy $ALL_USERS 1
${Else}
StrCpy $ALL_USERS 0
${EndIf}
Call UpdateShellVarContext
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
; See if previous version exists
; This can change ALL_USERS
Call ReadPreviousVersion
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
${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
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
FunctionEnd
Function StatusVersionCompare
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
Exch $1
Exch
Exch $0
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
Push $2
Push $3
Push $4
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
versioncomparebegin :
${If} $0 == " "
${AndIf} $1 == " "
StrCpy $PREVIOUS_VERSION_STATE " same "
goto versioncomparedone
${EndIf}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
StrCpy $2 0
StrCpy $3 0
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
; 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}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
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}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
split1loop :
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
StrCmp $0 " " split1loopdone
StrCpy $4 $0 1
StrCpy $0 $0 " " 1
StrCmp $4 " . " split1loopdone
StrCmp $4 " - " split1loopdone
StrCpy $2 $2 $4
goto split1loop
split1loopdone :
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
split2loop :
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
StrCmp $1 " " split2loopdone
StrCpy $4 $1 1
StrCpy $1 $1 " " 1
StrCmp $4 " . " split2loopdone
StrCmp $4 " - " split2loopdone
StrCpy $3 $3 $4
goto split2loop
split2loopdone :
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
${If} $2 > $3
StrCpy $PREVIOUS_VERSION_STATE " newer "
${ElseIf} $3 > $2
StrCpy $PREVIOUS_VERSION_STATE " older "
${Else}
goto versioncomparebegin
${EndIf}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
versioncomparedone :
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
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
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
Function .onInstSuccess
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
;${MementoSectionSave}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
; 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 "
2019-10-01 20:52:20 +03:00
Sleep 2000
2018-11-05 10:40:11 +01:00
${Else}
2019-10-01 20:52:20 +03:00
DetailPrint " ${NodeJsServerExeName} was not found to be running "
${EndIf}
2018-11-05 10:40:11 +01:00
$ { 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\ "
2019-03-25 17:35:01 +01:00
File /r " ${base_image_dir}\ "
2018-11-05 10:40:11 +01:00
SetOutPath " $INSTDIR \notifier "
File " ${top_srcdir}\node_modules\node-notifier\vendor\notifu\*.exe "
SetOutPath " $INSTDIR \assets\resources\fonts "
File /r " ${top_srcdir}\resources\fonts\ "
2019-10-01 20:52:20 +03:00
SetOutPath " $INSTDIR \assets\desktop\resources "
File /r " ${top_srcdir}\desktop\resources\ "
2018-11-05 10:40:11 +01:00
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
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
;--------------------------------
; 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
;--------------------------------
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
Var un.REMOVE_ALL_USERS
Var un.REMOVE_CURRENT_USER
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
;--------------------------------
;Uninstaller Functions
;--------------------------------
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
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}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
FunctionEnd
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
Function un.ReadPreviousVersion
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
ReadRegStr $R0 HKLM " ${AppRegistryKeyPath} " " "
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
${If} $R0 != " "
;Detect version
ReadRegStr $R2 HKLM " ${AppRegistryKeyPath} " " Version "
${If} $R2 == " "
StrCpy $R0 " "
${EndIf}
${EndIf}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
ReadRegStr $R1 HKCU " ${AppRegistryKeyPath} " " "
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
${If} $R1 != " "
;Detect version
ReadRegStr $R2 HKCU " ${AppRegistryKeyPath} " " Version "
${If} $R2 == " "
StrCpy $R1 " "
${EndIf}
${EndIf}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
${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}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
FunctionEnd
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
Function un.onInit
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
$ { 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
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
${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}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
FunctionEnd
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
Function un.RemoveStartmenu
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
Delete " $SMPROGRAMS \$MUI_TEMP\${UninstallLinkName} "
Delete " $SMPROGRAMS \$MUI_TEMP\${AppLinkFileName} "
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
$ { 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 "
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
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 "
2019-10-01 20:52:20 +03:00
Sleep 2000
2018-11-05 10:40:11 +01:00
${Else}
2019-10-01 20:52:20 +03:00
DetailPrint " ${AppExeName} was not found to be running "
${EndIf}
2018-11-05 10:40:11 +01:00
$ { nsProcess :: FindProcess } " ${NodeJsServerExeName} " $R0
${If} $R0 == 0
DetailPrint " ${NodeJsServerExeName} is running. Closing it down "
$ { nsProcess :: CloseProcess } " ${NodeJsServerExeName} " $R0
DetailPrint " Waiting for ${NodeJsServerExeName} to close "
2019-10-01 20:52:20 +03:00
Sleep 2000
2018-11-05 10:40:11 +01:00
${Else}
2019-10-01 20:52:20 +03:00
DetailPrint " ${NodeJsServerExeName} was not found to be running "
${EndIf}
2018-11-05 10:40:11 +01:00
$ { 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 "
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
$ { 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
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
DeleteRegKey /ifempty HKLM " ${AppRegistryKeyPath} "
DeleteRegKey /ifempty HKLM " ${OrgRegistryKeyPath} "
DeleteRegKey HKLM " ${UninstallRegKeyPath} "
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
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}
2019-10-01 20:52:20 +03:00
2018-11-05 10:40:11 +01:00
DeleteRegKey SHCTX " Software\Microsoft\Windows\CurrentVersion\App Paths\${AppExeName} "
SectionEnd