improve nsis

This commit is contained in:
Boof2015
2026-06-02 08:34:13 -04:00
parent 593d0e5ee8
commit 6dc0e43914
+47 -26
View File
@@ -6,11 +6,10 @@
; [x] Install Prism VST3 plugins (recommended)
;
; If checked, customInstall xcopies the bundled .vst3 bundles from
; $INSTDIR\resources\plugins\VST3\ into $COMMONFILES64\VST3\ — the standard
; system VST3 folder. The whole installer already runs elevated (perMachine=true
; → UAC prompt at launch), so writes to Common Files succeed without a second
; elevation. On uninstall, the bundles are removed unconditionally (harmless if
; the user opted out at install time).
; $INSTDIR\resources\plugins\VST3\ into $COMMONFILES64\VST3\. The whole
; installer already runs elevated (perMachine=true → UAC at launch), so writes
; to Common Files succeed without a second elevation. On uninstall, the bundles
; are removed unconditionally (harmless if the user opted out at install time).
!include "nsDialogs.nsh"
!include "LogicLib.nsh"
@@ -18,42 +17,64 @@
Var PRISM_VST_CHECKBOX
Var PRISM_VST_STATE
; Hook called from electron-builder's assistedInstaller.nsh between the directory
; page and the install-files page. Adds our custom checkbox page.
!macro customPageAfterChangeDir
Page custom prismVstOptionsPage prismVstOptionsPageLeave
!macro customInit
; Silent installs skip the options page, so default to installing plugins.
StrCpy $PRISM_VST_STATE ${BST_CHECKED}
!macroend
Function prismVstOptionsPage
!insertmacro MUI_HEADER_TEXT "VST3 Plugins" "Choose whether to install the Prism scope plugins."
; NOTE on parse order: this file is `!include`d BEFORE electron-builder's
; installer.nsi loads MUI2.nsh, so any reference to MUI macros (e.g.
; MUI_HEADER_TEXT) MUST live inside a macro body — macro bodies aren't parsed
; until `!insertmacro` runs them, which for customPageAfterChangeDir happens
; from inside assistedInstaller.nsh (post-MUI2). Functions therefore go inside
; the macro instead of at top level.
!macro customPageAfterChangeDir
Page custom prismVstOptionsPage prismVstOptionsPageLeave
nsDialogs::Create 1018
Pop $0
${If} $0 == error
Abort
${EndIf}
Function prismVstOptionsPage
!insertmacro MUI_HEADER_TEXT "VST3 Plugins" "Choose whether to install the Prism scope plugins."
${NSD_CreateCheckBox} 0 0u 100% 12u "Install Prism VST3 plugins (recommended)"
Pop $PRISM_VST_CHECKBOX
${NSD_Check} $PRISM_VST_CHECKBOX
nsDialogs::Create 1018
Pop $0
${If} $0 == error
Abort
${EndIf}
${NSD_CreateLabel} 0 22u 100% 80u "Installs the seven Prism scope plugins (Spectrum, Oscilloscope, Vectorscope, Spectrogram, VU Meter, Loudness Meter, Waveform) to:$\r$\n$\r$\n $COMMONFILES64\VST3$\r$\n$\r$\nDAWs (FL Studio, Ableton, Logic, Reaper, etc.) will find them on the next plugin rescan.$\r$\n$\r$\nUncheck to install only the Prism desktop app. You can re-run this installer at any time to add the plugins later."
Pop $0
${NSD_CreateCheckBox} 0 0u 100% 12u "Install Prism VST3 plugins (recommended)"
Pop $PRISM_VST_CHECKBOX
${NSD_Check} $PRISM_VST_CHECKBOX
nsDialogs::Show
FunctionEnd
${NSD_CreateLabel} 0 22u 100% 80u "Installs the seven Prism scope plugins (Spectrum, Oscilloscope, Vectorscope, Spectrogram, VU Meter, Loudness Meter, Waveform) to:$\r$\n$\r$\n $COMMONFILES64\VST3$\r$\n$\r$\nDAWs (FL Studio, Ableton, Logic, Reaper, etc.) will find them on the next plugin rescan.$\r$\n$\r$\nUncheck to install only the Prism desktop app. You can re-run this installer at any time to add the plugins later."
Pop $0
Function prismVstOptionsPageLeave
${NSD_GetState} $PRISM_VST_CHECKBOX $PRISM_VST_STATE
FunctionEnd
nsDialogs::Show
FunctionEnd
Function prismVstOptionsPageLeave
${NSD_GetState} $PRISM_VST_CHECKBOX $PRISM_VST_STATE
FunctionEnd
!macroend
!macro customInstall
${If} $PRISM_VST_STATE == ${BST_CHECKED}
DetailPrint "Installing Prism VST3 plugins to $COMMONFILES64\VST3"
${IfNot} ${FileExists} "$INSTDIR\resources\plugins\VST3\*.vst3"
DetailPrint "ERROR: bundled Prism VST3 plugins were not found at $INSTDIR\resources\plugins\VST3"
MessageBox MB_OK|MB_ICONSTOP "Prism VST3 plugins were selected, but the bundled plugin files were not found.$\r$\n$\r$\nMissing path:$\r$\n$INSTDIR\resources\plugins\VST3" /SD IDOK
Abort
${EndIf}
CreateDirectory "$COMMONFILES64\VST3"
; xcopy /E recurse, /I treat dest as dir, /Y overwrite without prompt.
; The trailing "\*" + "/E" copies each *.vst3 bundle subfolder verbatim.
nsExec::ExecToLog 'cmd.exe /c xcopy /E /I /Y "$INSTDIR\resources\plugins\VST3\*" "$COMMONFILES64\VST3\"'
Pop $0
${If} $0 != 0
DetailPrint "ERROR: Prism VST3 plugin copy failed with xcopy exit code $0"
MessageBox MB_OK|MB_ICONSTOP "Prism VST3 plugin installation failed while copying files to:$\r$\n$COMMONFILES64\VST3$\r$\n$\r$\nxcopy exit code: $0" /SD IDOK
Abort
${EndIf}
${Else}
DetailPrint "Prism VST3 plugins: skipped (opted out)."
${EndIf}