; livetrace-installer.nsi ; NSIS installer for livetrace v3.3.2 ; Builds on Linux (or in Docker) with: makensis livetrace-installer.nsi ; ; Place livetrace-windows-amd64.exe in the same directory before building. Unicode True ; ────────────────────────────────────────────── ; Metadata ; ────────────────────────────────────────────── !define APPNAME "livetrace" !define APPVERSION "3.3.2" !define PUBLISHER "ngtech1ltd" ; Source binary name (as built by Go) !define SRC_EXE "livetrace-windows-amd64.exe" ; Name it will have after installation !define INST_EXE "livetrace.exe" ; Registry key for Add/Remove Programs !define REG_UNINSTALL \ "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" ; ────────────────────────────────────────────── ; Installer settings ; ────────────────────────────────────────────── Name "${APPNAME} ${APPVERSION}" OutFile "livetrace-${APPVERSION}-setup.exe" InstallDir "$PROGRAMFILES64\${APPNAME}" InstallDirRegKey HKLM "${REG_UNINSTALL}" "InstallLocation" ; Administrator rights required (Program Files + system PATH) RequestExecutionLevel admin SetCompressor /SOLID lzma SetCompressorDictSize 32 ; ────────────────────────────────────────────── ; UI ; ────────────────────────────────────────────── !include "MUI2.nsh" !define MUI_ABORTWARNING !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" ; ────────────────────────────────────────────── ; Version info (visible in Properties → Details) ; ────────────────────────────────────────────── VIProductVersion "3.3.2.0" VIAddVersionKey "ProductName" "${APPNAME}" VIAddVersionKey "ProductVersion" "${APPVERSION}" VIAddVersionKey "CompanyName" "${PUBLISHER}" VIAddVersionKey "FileDescription" "${APPNAME} Installer" VIAddVersionKey "FileVersion" "${APPVERSION}" VIAddVersionKey "LegalCopyright" "(c) ${PUBLISHER}" ; ────────────────────────────────────────────── ; PATH helpers (PowerShell – avoids NSIS macro ; namespace issues between install / uninstall) ; ────────────────────────────────────────────── ; Append $INSTDIR to the machine-wide PATH ; Note: $$p / $$parts / $$_ are PowerShell variables — $$ escapes the $ for NSIS !macro AddToPath DetailPrint "Adding $INSTDIR to system PATH …" nsExec::ExecToLog \ 'powershell.exe -NonInteractive -NoProfile -Command \ "$$p = [Environment]::GetEnvironmentVariable(\"Path\",\"Machine\"); \ if ($$p -notlike \"*$INSTDIR*\") { \ [Environment]::SetEnvironmentVariable(\"Path\", \"$$p;$INSTDIR\", \"Machine\") \ }"' !macroend ; Remove $INSTDIR from the machine-wide PATH !macro RemoveFromPath DetailPrint "Removing $INSTDIR from system PATH …" nsExec::ExecToLog \ 'powershell.exe -NonInteractive -NoProfile -Command \ "$$parts = [Environment]::GetEnvironmentVariable(\"Path\",\"Machine\") -split \";\"; \ $$parts = $$parts | Where-Object { $$_ -ne \"$INSTDIR\" }; \ [Environment]::SetEnvironmentVariable(\"Path\", ($$parts -join \";\"), \"Machine\")"' !macroend ; ────────────────────────────────────────────── ; Install section ; ────────────────────────────────────────────── Section "livetrace (required)" SecMain SectionIn RO ; cannot be deselected SetOutPath "$INSTDIR" ; Copy binary — rename to plain "livetrace.exe" on the way in File "/oname=${INST_EXE}" "${SRC_EXE}" ; Add install dir to system PATH !insertmacro AddToPath ; Register with Add/Remove Programs WriteRegStr HKLM "${REG_UNINSTALL}" "DisplayName" "${APPNAME} ${APPVERSION}" WriteRegStr HKLM "${REG_UNINSTALL}" "DisplayVersion" "${APPVERSION}" WriteRegStr HKLM "${REG_UNINSTALL}" "Publisher" "${PUBLISHER}" WriteRegStr HKLM "${REG_UNINSTALL}" "InstallLocation" "$INSTDIR" WriteRegStr HKLM "${REG_UNINSTALL}" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "${REG_UNINSTALL}" "QuietUninstallString" '"$INSTDIR\uninstall.exe" /S' WriteRegDWORD HKLM "${REG_UNINSTALL}" "NoModify" 1 WriteRegDWORD HKLM "${REG_UNINSTALL}" "NoRepair" 1 ; Write the uninstaller WriteUninstaller "$INSTDIR\uninstall.exe" SectionEnd ; ────────────────────────────────────────────── ; Uninstall section ; ────────────────────────────────────────────── Section "Uninstall" ; Remove from system PATH !insertmacro RemoveFromPath ; Delete files Delete "$INSTDIR\${INST_EXE}" Delete "$INSTDIR\uninstall.exe" RMDir "$INSTDIR" ; Remove Add/Remove Programs entry DeleteRegKey HKLM "${REG_UNINSTALL}" SectionEnd