/*
ExecDos让NSIS执行cmd程序去掉黑框隐藏黑框
ExecDos在执行控制台程序时创建一个隐藏IO的子进程.相对于nsExec插件ExecDos有一些自己的特点:
在执行时可以调用stdin标准输入进行消息通信,比如你要输入用户名和注册码之类的.
即可同步执行也可以异步执行进程.ExecDos不必在Section段时执行,你可以把它放到.onInit函数段里执行.
Execdos支持多线程的,意味着你可以在同时执行多个程序.
ASYNC:异步执行,不用等到程序执行完就可以执行下一步操作.
TIMEOUT:等待执行时间,以毫秒为单位.
TOSTACK:可以获取执行程序的输入信息日志.
DETAILED:将信息输出到DetailedView信息框里.
TOWINDOW:将信息附加到指定窗口制件,支持Edit,RichEdit,ListView和ListBox.
TOFUNC:将信息传递给函数,你可以自行处理消息内容.
DISABLEFSR:不允许64位系统的重定向.
ExecDos::wait:等待程序执行完毕.
ExecDos::isdone:获得进程执行状态,1程序执行完毕,0程序正在运行当中,-1程序出错了.要配合/ASYNC异步参数一起使用.
*/
!AddPluginDir "../../Plugins"
; Base definition
!define APP_NAME "ExecDos"
!define DOS_APP consApp.exe
; General Attributes
Name "${APP_NAME}永恒心锁"
OutFile "${APP_NAME}.exe"
; Interface Settings
!include "MUI2.nsh"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "SimpChinese"
Function LogFunction
IntOp $1 $1 + 1
Pop $0
MessageBox MB_OK "$1:$0"
FunctionEnd
Section "永恒心锁"
#异步执行,将信息输出到DetailedView信息框里,等待时间6秒,控制台程序,用户名和密码
ExecDos::exec /NOUNLOAD /ASYNC /DETAILED /TIMEOUT=6000 "$EXEDIRconsApp.exe" "test_login$ntest_pwd$n"
Pop $R9
ExecDos::isdone /NOUNLOAD $R9
Pop $R1
DetailPrint "程序执行状态返回值isdone$R1"
Sleep 3000
ExecDos::isdone /NOUNLOAD $R9
Pop $R1
DetailPrint "暂停5秒后程序执行状态返回值isdone$R1"
ExecDos::wait $R9
Pop $R7
DetailPrint "程序的退出返回值是:$R7"
#将信息传递到函数中
GetFunctionAddress $0 LogFunction
ExecDos::exec /ASYNC /TOFUNC /TIMEOUT=5000 "$EXEDIRconsApp.exe" "test_login$ntest_pwd$n" $0
SectionEnd
THE END
暂无评论内容