feat: improve installer with custom icon, launch-after-install, and running-instance detection
Lint & Test / test (push) Successful in 9s
Lint & Test / test (push) Successful in 9s
- Use custom icon.ico for installer/uninstaller UI - LaunchApp opens server then browser after install - .onInit detects running instance and offers to stop it - Use WMIC-based process kill targeting embedded Python path - start-hidden.vbs prefers embedded Python over system Python - Add pystray dependency to build script - CLAUDE.md: note to consult CI/CD guide for build changes
This commit is contained in:
+34
-9
@@ -18,13 +18,12 @@ InstallDir "$LOCALAPPDATA\${APPNAME}"
|
||||
RequestExecutionLevel user
|
||||
|
||||
; --- UI ---
|
||||
; To use a custom icon, convert icon.svg to icon.ico and uncomment:
|
||||
; !define MUI_ICON "media_server\static\icons\icon.ico"
|
||||
; !define MUI_UNICON "media_server\static\icons\icon.ico"
|
||||
!define MUI_ICON "media_server\static\icons\icon.ico"
|
||||
!define MUI_UNICON "media_server\static\icons\icon.ico"
|
||||
!define MUI_ABORTWARNING
|
||||
!define MUI_FINISHPAGE_RUN "wscript.exe"
|
||||
!define MUI_FINISHPAGE_RUN_PARAMETERS '"$INSTDIR\scripts\${VBSNAME}"'
|
||||
!define MUI_FINISHPAGE_RUN ""
|
||||
!define MUI_FINISHPAGE_RUN_TEXT "Launch ${APPNAME}"
|
||||
!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApp
|
||||
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
@@ -37,13 +36,38 @@ RequestExecutionLevel user
|
||||
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
|
||||
; --- Functions ---
|
||||
Function LaunchApp
|
||||
ExecShell "open" "wscript.exe" '"$INSTDIR\scripts\${VBSNAME}"'
|
||||
; Give the server a moment to start, then open the UI in the default browser
|
||||
Sleep 2000
|
||||
ExecShell "open" "http://localhost:8765/"
|
||||
FunctionEnd
|
||||
|
||||
Function .onInit
|
||||
; Check if server is running by trying to open its Python executable exclusively
|
||||
IfFileExists "$INSTDIR\python\python.exe" 0 done
|
||||
ClearErrors
|
||||
FileOpen $0 "$INSTDIR\python\python.exe" a
|
||||
IfErrors locked
|
||||
; File opened fine — server is not running
|
||||
FileClose $0
|
||||
Goto done
|
||||
locked:
|
||||
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \
|
||||
"${APPNAME} is currently running.$\n$\nYes = Stop the server and continue$\nNo = Continue without stopping (may cause errors)$\nCancel = Abort installation" \
|
||||
IDYES kill IDNO done
|
||||
Abort
|
||||
kill:
|
||||
nsExec::ExecToLog 'wmic process where "ExecutablePath like $\'%Media Server%python%$\'" call terminate'
|
||||
Sleep 2000
|
||||
done:
|
||||
FunctionEnd
|
||||
|
||||
; --- Sections ---
|
||||
Section "!Core (required)" SecCore
|
||||
SectionIn RO
|
||||
|
||||
; Stop running instance if any
|
||||
nsExec::ExecToLog 'taskkill /F /IM python.exe /FI "WINDOWTITLE eq media_server*"'
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
; Copy entire distribution
|
||||
@@ -112,7 +136,8 @@ SectionEnd
|
||||
; --- Uninstaller ---
|
||||
Section "Uninstall"
|
||||
; Stop running instance
|
||||
nsExec::ExecToLog 'taskkill /F /IM python.exe /FI "WINDOWTITLE eq media_server*"'
|
||||
nsExec::ExecToLog 'wmic process where "ExecutablePath like $\'%Media Server%python%$\'" call terminate'
|
||||
nsExec::ExecToLog 'taskkill /F /IM media-server.exe'
|
||||
|
||||
; Remove application files
|
||||
RMDir /r "$INSTDIR\python"
|
||||
|
||||
Reference in New Issue
Block a user