ExecDos plug-in: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
Line 32: Line 32:
<highlight-nsis>
<highlight-nsis>
ExecDos::exec /NOUNLOAD /ASYNC "$EXEDIR\consApp.exe" "test_login$\ntest_pwd$\n" "$EXEDIR\execdos.log"
ExecDos::exec /NOUNLOAD /ASYNC "$EXEDIR\consApp.exe" "test_login$\ntest_pwd$\n" "$EXEDIR\execdos.log"
# place here some installation code or Sleep+DetailPrint
ExecDos::wait
ExecDos::wait
Pop $0 # return value
Pop $0 # return value

Revision as of 14:44, 23 July 2005

Author: Takhir (talk, contrib)


Links

Download:
ExecDos.zip (40 KB)
Forum thread

Description

Plug-in works with console applications - creates hidden child process with redirected i/o. Compare to NSISdl has two add-ons: 1) string parameter that serves as stdin for running application; 2) Async (background) process launch. First may be useful if you want to give login/password to running application, second - for long running applications. Plug-in puts log to file instead of 'detailed' installer window (optional). Maximim input string size is 8kB in the special NSIS build, 1 kB otherwise. Usage:

How To Use

ExecDos::exec [/NOUNLOAD /ASYNC] [/TIMEOUT=xxx] application_to_run [stdin_string] [log_file_name]
ASYNC
Not waits for process exit. Use 'wait' call if you want to get exit code
TIMEOUT
TOTAL execution time, milliseconds, for example /TIMEOUT=10000. Default is big enough. Short timeouts may cause app to be terminated.
application_to_run
application to run.
stdin_string
all that application can get from stdin (optional, use "" if stack is not empty)
log_file_name
file where to put app's stdout (optional, but use "" if stack is not empty)

Example

ExecDos::exec /TIMEOUT=2000 "$EXEDIR\consApp.exe" "test_login$\ntest_pwd$\n" "$EXEDIR\execdos.log"
Pop $0 # return value
MessageBox MB_OK "Exit code $0"

or

ExecDos::exec /NOUNLOAD /ASYNC "$EXEDIR\consApp.exe" "test_login$\ntest_pwd$\n" "$EXEDIR\execdos.log"
# place here some installation code or Sleep+DetailPrint
ExecDos::wait
Pop $0 # return value
MessageBox MB_OK "Exit code $0"

or

ExecDos::exec "$EXEDIR\consApp.exe" "" ""
Pop $0 # return value
MessageBox MB_OK "Exit code $0"

BAT files specifics. On some of Win98 systems where "Close on exit" option is not set for DOS apps it was found that after batch execution was finished (and installer continue it's job) hidden window still remains in the system as "winoldapp". Following two lines solve the problem

@echo off
# place your code here
cls

Telnet and ssh Plug-in not works with applications requiring terminal emulation.