Files
pqAutomationApp/installer.nsi

131 lines
4.6 KiB
NSIS
Raw Normal View History

2026-04-16 16:51:05 +08:00
Unicode True
SetCompressor /SOLID lzma
RequestExecutionLevel user
!include "MUI2.nsh"
!include "LogicLib.nsh"
!define PROJECT_ROOT "."
!define DIST_ROOT "${PROJECT_ROOT}\\dist\\pqAutomationApp"
!define APP_EXE "pqAutomationApp.exe"
!define APP_ID "PQAutomationApp"
; ------------------------------------------------------------
; Detect Python from PATH
; ------------------------------------------------------------
!define PYTHON_CMD "python"
!system '"${PYTHON_CMD}" -V > python_check.txt 2>&1'
!searchparse /file python_check.txt "Python " PY_VER ""
!if "${PY_VER}" == ""
!error "Python not found. Ensure python.exe is available in PATH."
!endif
!delfile python_check.txt
; ------------------------------------------------------------
; Extract APP_NAME and APP_VERSION from Python code
; (App version file may contain Unicode, so we use Python to output ASCII)
; ------------------------------------------------------------
!system '"${PYTHON_CMD}" -c "import app_version; print(app_version.APP_NAME)" > app_name.txt'
!system '"${PYTHON_CMD}" -c "import app_version; print(app_version.APP_VERSION)" > app_version.txt'
!searchparse /file "app_name.txt" "" APP_NAME ""
!searchparse /file "app_version.txt" "" APP_VERSION ""
!delfile "app_name.txt"
!delfile "app_version.txt"
; ------------------------------------------------------------
; Registry Keys
; ------------------------------------------------------------
!define UNINSTALL_REG_KEY "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${APP_ID}"
!define APP_REG_KEY "Software\\${APP_ID}"
Name "${APP_NAME} ${APP_VERSION}"
OutFile "dist\\PQAutomationApp_Setup_${APP_VERSION}.exe"
InstallDir "$LOCALAPPDATA\\Programs\\${APP_ID}"
InstallDirRegKey HKCU "${APP_REG_KEY}" "InstallDir"
!define MUI_ABORTWARNING
!define MUI_ICON "assets\\pq.ico"
!define MUI_UNICON "assets\\pq.ico"
!insertmacro MUI_PAGE_WELCOME
!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"
; ------------------------------------------------------------
; Init
; ------------------------------------------------------------
Function .onInit
IfFileExists "${DIST_ROOT}\\${APP_EXE}" +2 0
MessageBox MB_ICONSTOP|MB_OK "Executable not found: ${DIST_ROOT}\\${APP_EXE}$\r$\nPlease build using PyInstaller first."
IfFileExists "${DIST_ROOT}\\${APP_EXE}" +2 0
Abort
FunctionEnd
; ------------------------------------------------------------
; Installation Section
; ------------------------------------------------------------
Section "Main Installation" SEC_MAIN
SetOutPath "$INSTDIR"
CreateDirectory "$INSTDIR"
CreateDirectory "$INSTDIR\\internal"
CreateDirectory "$INSTDIR\\settings"
File "${DIST_ROOT}\\${APP_EXE}"
SetOutPath "$INSTDIR\\internal"
File /r "${DIST_ROOT}\\internal\\*.*"
IfFileExists "${PROJECT_ROOT}\\settings\\pq_config.json" 0 +3
SetOutPath "$INSTDIR\\settings"
File /oname=pq_config.json "${PROJECT_ROOT}\\settings\\pq_config.json"
WriteUninstaller "$INSTDIR\\Uninstall.exe"
WriteRegStr HKCU "${APP_REG_KEY}" "InstallDir" "$INSTDIR"
WriteRegStr HKCU "${UNINSTALL_REG_KEY}" "DisplayName" "${APP_NAME}"
WriteRegStr HKCU "${UNINSTALL_REG_KEY}" "DisplayVersion" "${APP_VERSION}"
WriteRegStr HKCU "${UNINSTALL_REG_KEY}" "InstallLocation" "$INSTDIR"
WriteRegStr HKCU "${UNINSTALL_REG_KEY}" "DisplayIcon" "$INSTDIR\\${APP_EXE}"
WriteRegStr HKCU "${UNINSTALL_REG_KEY}" "Publisher" "Moka"
WriteRegStr HKCU "${UNINSTALL_REG_KEY}" "UninstallString" "$\"$INSTDIR\\Uninstall.exe$\""
WriteRegDWORD HKCU "${UNINSTALL_REG_KEY}" "NoModify" 1
WriteRegDWORD HKCU "${UNINSTALL_REG_KEY}" "NoRepair" 1
CreateDirectory "$SMPROGRAMS\\${APP_NAME}"
CreateShortcut "$SMPROGRAMS\\${APP_NAME}\\${APP_NAME}.lnk" "$INSTDIR\\${APP_EXE}"
CreateShortcut "$SMPROGRAMS\\${APP_NAME}\\Uninstall ${APP_NAME}.lnk" "$INSTDIR\\Uninstall.exe"
CreateShortcut "$DESKTOP\\${APP_NAME}.lnk" "$INSTDIR\\${APP_EXE}"
SectionEnd
; ------------------------------------------------------------
; Uninstall Section
; ------------------------------------------------------------
Section "Uninstall"
Delete "$DESKTOP\\${APP_NAME}.lnk"
Delete "$SMPROGRAMS\\${APP_NAME}\\${APP_NAME}.lnk"
Delete "$SMPROGRAMS\\${APP_NAME}\\Uninstall ${APP_NAME}.lnk"
RMDir "$SMPROGRAMS\\${APP_NAME}"
Delete "$INSTDIR\\${APP_EXE}"
Delete "$INSTDIR\\Uninstall.exe"
Delete "$INSTDIR\\settings\\pq_config.json"
RMDir /r "$INSTDIR\\internal"
RMDir /r "$INSTDIR\\settings"
RMDir "$INSTDIR"
DeleteRegKey HKCU "${UNINSTALL_REG_KEY}"
DeleteRegKey HKCU "${APP_REG_KEY}"
SectionEnd