执行一程序并等待其结束,下面这个函数执行会出错,如果有其它方法能实现这个功能也欢迎提出来!!!function WinExecAndWait32(FileName:String; Visibility :integer):integer;varzAppName:array[0..512] of char;zCurDir:array[0..255] of char;WorkDir:String;StartupInfo:TStartupInfo;ProcessInfo:TProcessInformation;beginStrPCopy(zAppName ,FileName);
GetDir(0 ,WorkDir);StrPCopy(zCurDir,WorkDir);FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,zAppName,nil,nil,false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,ProcessInfo) then Result := -1
else beginWaitforSingleObject(ProcessInfo.hProcess,INFINITE);GetExitCodeProcess(ProcessInfo.hProcess,Result);end;end;
GetDir(0 ,WorkDir);StrPCopy(zCurDir,WorkDir);FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,zAppName,nil,nil,false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,ProcessInfo) then Result := -1
else beginWaitforSingleObject(ProcessInfo.hProcess,INFINITE);GetExitCodeProcess(ProcessInfo.hProcess,Result);end;end;
STARTUPINFO start;
PROCESS_INFORMATION proc;
NUMBER ret, i;
begin
start.cb = 68;
start.wShowWindow =0;
start.dwFlags = STARTF_USESHOWWINDOW;
if CreateProcessA(0, cmd, 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &start, &proc) != 0 then
ret = WaitForSingleObject(proc.hProcess, 0xFFFF);
if ret = WAIT_TIMEOUT then
TerminateProcess(proc.hProcess, ret);
endif;
i = proc.hProcess;
// GetExitCodeProcess(proc.hProcess, ret);
CloseHandle(proc.hProcess);
endif;
end;
var
i:cardinal;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,pchar(filename),nil,nil,false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,ProcessInfo) then Result := -1
else begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,i);
result:=i;
end;
end;
和你的基本一致,我测试没有问题,不信你试试我的函数