Files
nsis-plugin-nsjson/examples/ConsoleExec.nsi
T
2026-04-30 00:14:03 +02:00

193 lines
6.4 KiB
NSIS

!include MUI2.nsh
Name `nsJSON plug-in`
OutFile nsJSON_ConsoleExec.exe
RequestExecutionLevel user
ShowInstDetails show
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ComponentsPage_Leave
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English
Section
CreateDirectory $EXEDIR\Output
SectionEnd
Section /o `Console App` NATIVE
InitPluginsDir
StrCpy $R0 $PLUGINSDIR\ConsoleApp.exe
File /oname=$R0 Bin\ConsoleApp.exe
nsJSON::Set /tree ConsoleExec /value `{ "Path": "$R0", "WorkingDir": "$PLUGINSDIR", "RawOutput": true }`
; Provide arguments as a single string or an array.
nsJSON::Set /tree ConsoleExec Arguments /value `[]`
nsJSON::Set /tree ConsoleExec Arguments /value `"arg1"`
nsJSON::Set /tree ConsoleExec Arguments /value `"arg2"`
; Provide input as a single string or an array.
nsJSON::Set /tree ConsoleExec Input /value `"hello"`
; Export the tree to file for debugging.
DetailPrint `Generate: $EXEDIR\Output\ConsoleExecInput.json from ConsoleExec`
nsJSON::Serialize /tree ConsoleExec /format /file $EXEDIR\Output\ConsoleExecInput.json
; Execute the console application.
DetailPrint `Exec: $R0`
nsJSON::Set /tree ConsoleExecOutput /exec ConsoleExec
; Save the output to file.
DetailPrint `Generate: $EXEDIR\Output\ConsoleExecOutput.json from ConsoleExecOutput`
nsJSON::Serialize /tree ConsoleExecOutput /format /file $EXEDIR\Output\ConsoleExecOutput.json
SectionEnd
Section /o `Async Console App` NATIVEASYNC
InitPluginsDir
StrCpy $R0 $PLUGINSDIR\ConsoleApp.exe
File /oname=$R0 Bin\ConsoleApp.exe
nsJSON::Set /tree ConsoleExec /value `{ "Async": true, "Path": "$R0", "WorkingDir": "$PLUGINSDIR", "RawOutput": true }`
; Provide arguments as a single string or an array.
nsJSON::Set /tree ConsoleExec Arguments /value `[]`
nsJSON::Set /tree ConsoleExec Arguments /value `"arg1"`
nsJSON::Set /tree ConsoleExec Arguments /value `"arg2"`
; Provide input as a single string or an array.
nsJSON::Set /tree ConsoleExec Input /value `"hello"`
; Export the tree to file for debugging.
DetailPrint `Generate: $EXEDIR\Output\AsyncConsoleExecInput.json from ConsoleExec`
nsJSON::Serialize /tree ConsoleExec /format /file $EXEDIR\Output\AsyncConsoleExecInput.json
; Execute the console application.
DetailPrint `Exec: $R0`
nsJSON::Set /tree AsyncConsoleExecOutput /exec ConsoleExec
; Wait until done.
${Do}
Sleep 1000
nsJSON::Wait ConsoleExec /timeout 0
Pop $R0
${If} $R0 != wait
${Break}
${EndIf}
DetailPrint `Waiting...`
${Loop}
DetailPrint `Finished...`
; Save the output to file.
DetailPrint `Generate: $EXEDIR\Output\AsyncConsoleExecOutput.json from AsyncConsoleExecOutput`
nsJSON::Serialize /tree AsyncConsoleExecOutput /format /file $EXEDIR\Output\AsyncConsoleExecOutput.json
SectionEnd
Section /o `.NET Console App` DOTNET
InitPluginsDir
StrCpy $R0 $PLUGINSDIR\ConsoleAppDotNet.exe
File /oname=$R0 Bin\ConsoleAppDotNet.exe
nsJSON::Set /tree ConsoleExec /value `{ "Path": "$R0", "WorkingDir": "$PLUGINSDIR" }`
; Provide arguments as a single string or an array.
nsJSON::Set /tree ConsoleExec Arguments /value `[]`
nsJSON::Set /tree ConsoleExec Arguments /value `"arg1"`
nsJSON::Set /tree ConsoleExec Arguments /value `"arg2"`
; Provide input as a single string or an array.
nsJSON::Set /tree ConsoleExec Input /value `"hello"`
; Export the tree to file for debugging.
DetailPrint `Generate: $EXEDIR\Output\ConsoleExecDotNetInput.json from ConsoleExec`
nsJSON::Serialize /tree ConsoleExec /format /file $EXEDIR\Output\ConsoleExecDotNetInput.json
; Execute the console application.
DetailPrint `Exec: $R0`
nsJSON::Set /tree ConsoleExecOutput /exec ConsoleExec
; Save the output to file.
DetailPrint `Generate: $EXEDIR\Output\ConsoleExecDotNetOutput.json from ConsoleExecOutput`
nsJSON::Serialize /tree ConsoleExecOutput /format /file $EXEDIR\Output\ConsoleExecDotNetOutput.json
SectionEnd
Section /o `UI Thread Console App` UINATIVE
SectionEnd
Function ComponentsPage_Leave
${IfNot} ${SectionIsSelected} ${UINATIVE}
Return
${EndIf}
GetDlgItem $R0 $HWNDPARENT 1
EnableWindow $R0 0
GetDlgItem $R0 $HWNDPARENT 2
EnableWindow $R0 0
GetDlgItem $R0 $HWNDPARENT 3
EnableWindow $R0 0
FindWindow $R0 `#32770` `` $HWNDPARENT
GetDlgItem $R0 $R0 1032
EnableWindow $R0 0
Banner::Show /set 76 `Executing ConsoleApp.exe` `Please wait...`
InitPluginsDir
StrCpy $R0 $PLUGINSDIR\ConsoleApp.exe
File /oname=$R0 Bin\ConsoleApp.exe
nsJSON::Set /tree ConsoleExec /value `{ "UIAsync": true, "Path": "$R0", "WorkingDir": "$PLUGINSDIR", "RawOutput": true }`
; Provide arguments as a single string or an array.
nsJSON::Set /tree ConsoleExec Arguments /value `[]`
nsJSON::Set /tree ConsoleExec Arguments /value `"arg1"`
nsJSON::Set /tree ConsoleExec Arguments /value `"arg2"`
; Provide input as a single string or an array.
nsJSON::Set /tree ConsoleExec Input /value `"hello"`
; Export the tree to file for debugging.
nsJSON::Serialize /tree ConsoleExec /format /file $EXEDIR\Output\UIConsoleExecInput.json
; Execute the console application.
nsJSON::Set /tree UIConsoleExecOutput /exec ConsoleExec
; Save the output to file.
nsJSON::Serialize /tree UIConsoleExecOutput /format /file $EXEDIR\Output\UIConsoleExecOutput.json
Banner::Destroy
GetDlgItem $R0 $HWNDPARENT 1
EnableWindow $R0 1
GetDlgItem $R0 $HWNDPARENT 2
EnableWindow $R0 1
GetDlgItem $R0 $HWNDPARENT 3
EnableWindow $R0 1
FindWindow $R0 `#32770` `` $HWNDPARENT
GetDlgItem $R0 $R0 1032
EnableWindow $R0 1
FunctionEnd
LangString NATIVEDesc ${LANG_ENGLISH} `Executes native console app with STDIN data and reads JSON from STDOUT`
LangString NATIVEASYNCDesc ${LANG_ENGLISH} `Executes native console app asynchronously with STDIN data and reads JSON from STDOUT`
LangString DOTNETDesc ${LANG_ENGLISH} `Executes .NET console app with STDIN data and reads JSON from STDOUT`
LangString UINATIVEDesc ${LANG_ENGLISH} `Executes native console app asynchronously while processing window messages`
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${NATIVE} $(NATIVEDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${NATIVEASYNC} $(NATIVEASYNCDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${DOTNET} $(DOTNETDesc)
!insertmacro MUI_DESCRIPTION_TEXT ${UINATIVE} $(UINATIVEDesc)
!insertmacro MUI_FUNCTION_DESCRIPTION_END