| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- !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
|