mirror of
https://github.com/netbirdio/netbird.git
synced 2024-12-24 15:48:52 +01:00
96cdcf8e49
* Change SetShellVarContext scope to create program links for standard users * Include guidelines for building the Windows Netbird installer during development * Add Wireguard driver requirement to Windows build instructions
214 lines
5.9 KiB
Plaintext
214 lines
5.9 KiB
Plaintext
!define APP_NAME "Netbird"
|
|
!define COMP_NAME "Netbird"
|
|
!define WEB_SITE "Netbird.io"
|
|
!define VERSION $%APPVER%
|
|
!define COPYRIGHT "Netbird Authors, 2022"
|
|
!define DESCRIPTION "A WireGuard®-based mesh network that connects your devices into a single private network"
|
|
!define INSTALLER_NAME "netbird-installer.exe"
|
|
!define MAIN_APP_EXE "Netbird"
|
|
!define ICON "ui\\netbird.ico"
|
|
!define BANNER "ui\\banner.bmp"
|
|
!define LICENSE_DATA "..\\LICENSE"
|
|
|
|
!define INSTALL_DIR "$PROGRAMFILES64\${APP_NAME}"
|
|
!define INSTALL_TYPE "SetShellVarContext all"
|
|
!define REG_ROOT "HKLM"
|
|
!define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}"
|
|
!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
|
|
|
|
!define UI_APP_NAME "Netbird UI"
|
|
!define UI_APP_EXE "Netbird-ui"
|
|
|
|
!define UI_REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${UI_APP_EXE}"
|
|
!define UI_UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${UI_APP_NAME}"
|
|
|
|
Unicode True
|
|
|
|
######################################################################
|
|
|
|
VIProductVersion "${VERSION}"
|
|
VIAddVersionKey "ProductName" "${APP_NAME}"
|
|
VIAddVersionKey "CompanyName" "${COMP_NAME}"
|
|
VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
|
|
VIAddVersionKey "FileDescription" "${DESCRIPTION}"
|
|
VIAddVersionKey "FileVersion" "${VERSION}"
|
|
|
|
######################################################################
|
|
|
|
SetCompressor /SOLID Lzma
|
|
Name "${APP_NAME}"
|
|
Caption "${APP_NAME}"
|
|
OutFile "..\\${INSTALLER_NAME}"
|
|
BrandingText "${APP_NAME}"
|
|
InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" ""
|
|
InstallDir "${INSTALL_DIR}"
|
|
LicenseData "${LICENSE_DATA}"
|
|
ShowInstDetails Show
|
|
|
|
######################################################################
|
|
|
|
!define MUI_ICON "${ICON}"
|
|
!define MUI_UNICON "${ICON}"
|
|
!define MUI_WELCOMEFINISHPAGE_BITMAP "${BANNER}"
|
|
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${BANNER}"
|
|
!define MUI_FINISHPAGE_RUN
|
|
!define MUI_FINISHPAGE_RUN_TEXT "Start ${UI_APP_NAME}"
|
|
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink"
|
|
######################################################################
|
|
|
|
!include "MUI2.nsh"
|
|
!include LogicLib.nsh
|
|
|
|
!define MUI_ABORTWARNING
|
|
!define MUI_UNABORTWARNING
|
|
|
|
!insertmacro MUI_PAGE_WELCOME
|
|
|
|
!insertmacro MUI_PAGE_LICENSE "${LICENSE_DATA}"
|
|
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
|
|
!insertmacro MUI_PAGE_FINISH
|
|
|
|
!insertmacro MUI_UNPAGE_CONFIRM
|
|
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
|
|
!insertmacro MUI_UNPAGE_FINISH
|
|
|
|
!insertmacro MUI_LANGUAGE "English"
|
|
|
|
######################################################################
|
|
|
|
Function GetAppFromCommand
|
|
Exch $1
|
|
Push $2
|
|
StrCpy $2 $1 1 0
|
|
StrCmp $2 '"' 0 done
|
|
Push $3
|
|
StrCpy $3 ""
|
|
loop:
|
|
IntOp $3 $3 + 1
|
|
StrCpy $2 $1 1 $3
|
|
StrCmp $2 '' +2
|
|
StrCmp $2 '"' 0 loop
|
|
StrCpy $1 $1 $3
|
|
StrCpy $1 $1 "" 1 ; Remove starting quote
|
|
Pop $3
|
|
done:
|
|
Pop $2
|
|
Exch $1
|
|
FunctionEnd
|
|
|
|
!macro GetAppFromCommand in out
|
|
Push "${in}"
|
|
Call GetAppFromCommand
|
|
Pop ${out}
|
|
!macroend
|
|
|
|
!macro UninstallPreviousNSIS UninstCommand CustomParameters
|
|
Push $0
|
|
Push $1
|
|
Push $2
|
|
Push '${CustomParameters}'
|
|
Push '${UninstCommand}'
|
|
Call GetAppFromCommand ; Remove quotes and parameters from UninstCommand
|
|
Pop $0
|
|
Pop $1
|
|
GetFullPathName $2 "$0\.."
|
|
ExecWait '"$0" /S $1 _?=$2'
|
|
Delete "$0" ; Extra cleanup because we used _?=
|
|
RMDir "$2"
|
|
Pop $2
|
|
Pop $1
|
|
Pop $0
|
|
!macroend
|
|
|
|
Function .onInit
|
|
StrCpy $INSTDIR "${INSTALL_DIR}"
|
|
ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NAME)" "UninstallString"
|
|
${If} $R0 != ""
|
|
# if silent install jump to uninstall step
|
|
IfSilent uninstall
|
|
|
|
MessageBox MB_YESNO|MB_ICONQUESTION "NetBird is already installed. We must remove it before installing upgrading NetBird. Proceed?" IDNO done IDYES uninstall
|
|
|
|
uninstall:
|
|
!insertmacro UninstallPreviousNSIS $R0 "/NoMsgBox"
|
|
done:
|
|
|
|
${EndIf}
|
|
FunctionEnd
|
|
######################################################################
|
|
Section -MainProgram
|
|
${INSTALL_TYPE}
|
|
# SetOverwrite ifnewer
|
|
SetOutPath "$INSTDIR"
|
|
File /r "..\\dist\\netbird_windows_amd64\\"
|
|
SectionEnd
|
|
######################################################################
|
|
|
|
Section -Icons_Reg
|
|
SetOutPath "$INSTDIR"
|
|
WriteUninstaller "$INSTDIR\netbird_uninstall.exe"
|
|
|
|
WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "" "$INSTDIR\${MAIN_APP_EXE}"
|
|
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayName" "${APP_NAME}"
|
|
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\netbird_uninstall.exe"
|
|
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${MAIN_APP_EXE}"
|
|
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayVersion" "${VERSION}"
|
|
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "Publisher" "${COMP_NAME}"
|
|
|
|
WriteRegStr ${REG_ROOT} "${UI_REG_APP_PATH}" "" "$INSTDIR\${UI_APP_EXE}"
|
|
|
|
EnVar::SetHKLM
|
|
EnVar::AddValueEx "path" "$INSTDIR"
|
|
|
|
SetShellVarContext all
|
|
CreateShortCut "$SMPROGRAMS\${APP_NAME}.lnk" "$INSTDIR\${UI_APP_EXE}"
|
|
CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${UI_APP_EXE}"
|
|
SectionEnd
|
|
|
|
Section -Post
|
|
ExecWait '"$INSTDIR\${MAIN_APP_EXE}" service install'
|
|
ExecWait '"$INSTDIR\${MAIN_APP_EXE}" service start'
|
|
# sleep a bit for visibility
|
|
Sleep 1000
|
|
SectionEnd
|
|
######################################################################
|
|
|
|
Section Uninstall
|
|
${INSTALL_TYPE}
|
|
|
|
ExecWait '"$INSTDIR\${MAIN_APP_EXE}" service stop'
|
|
ExecWait '"$INSTDIR\${MAIN_APP_EXE}" service uninstall'
|
|
|
|
# kill ui client
|
|
ExecWait `taskkill /im ${UI_APP_EXE}.exe`
|
|
|
|
# wait the service uninstall take unblock the executable
|
|
Sleep 3000
|
|
Delete "$INSTDIR\${UI_APP_EXE}"
|
|
Delete "$INSTDIR\${MAIN_APP_EXE}"
|
|
Delete "$INSTDIR\wintun.dll"
|
|
RmDir /r "$INSTDIR"
|
|
|
|
SetShellVarContext all
|
|
Delete "$DESKTOP\${APP_NAME}.lnk"
|
|
Delete "$SMPROGRAMS\${APP_NAME}.lnk"
|
|
|
|
DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}"
|
|
DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}"
|
|
EnVar::SetHKLM
|
|
EnVar::DeleteValue "path" "$INSTDIR"
|
|
SectionEnd
|
|
|
|
|
|
Function LaunchLink
|
|
SetShellVarContext all
|
|
SetOutPath $INSTDIR
|
|
ShellExecAsUser::ShellExecAsUser "" "$DESKTOP\${APP_NAME}.lnk"
|
|
FunctionEnd
|