Function WinExecExW(cmd,workdir:pchar;visiable:integer):DWORD; var StartupInfo:TStartupInfo; ProcessInfo:TProcessInformation; begin FillChar(StartupInfo,SizeOf(StartupInfo),#0); StartupInfo.cb:=SizeOf(StartupInfo); StartupInfo.dwFlags:=STARTF_USESHOWWINDOW; StartupInfo.wShowWindow:=visiable; if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo) then result:=0 else begin waitforsingleobject(processinfo.hProcess,INFINITE); GetExitCodeProcess(ProcessInfo.hProcess,Result); end; end; 调用时,WinExecExW("a.exe","c:\",SW_SHOW);WinExecExW("b.exe","c:\",SW_SHOW);WinExecExW("c.exe","c:\",SW_SHOW); a.exe执行完了才执行b.exe然后才是c.exe
写错了一个参数 if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo) 改成 if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,workdir,StartupInfo,ProcessInfo)
2. 进程间通信 其他没啥了。。比如说 定义全局消息A完了就发给ALL 然后。。
1.bat:
a.exe
b.exe
c.exe
wait
createprocess
wait
createprocess
wait
var
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
FillChar(StartupInfo,SizeOf(StartupInfo),#0);
StartupInfo.cb:=SizeOf(StartupInfo);
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow:=visiable;
if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo) then
result:=0
else
begin
waitforsingleobject(processinfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end; 调用时,WinExecExW("a.exe","c:\",SW_SHOW);WinExecExW("b.exe","c:\",SW_SHOW);WinExecExW("c.exe","c:\",SW_SHOW);
a.exe执行完了才执行b.exe然后才是c.exe
if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo)
改成
if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,workdir,StartupInfo,ProcessInfo)