function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PDWORD): Longword;
var //路径,是否显示被调用的程序的窗体,是否等待外部程序执行完毕
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartupInfo.wShowWindow := ShowCmd;
if not CreateProcess(nil,@Filename[1], nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo,ProcessInfo)
then
Result := WAIT_FAILED
else
begin
if wait = FALSE then
begin
if ProcID <> nil then
ProcID^ := ProcessInfo.dwProcessId;
result := WAIT_FAILED;
exit;
end;
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
end;
if ProcessInfo.hProcess <> 0 then
CloseHandle(ProcessInfo.hProcess);
if ProcessInfo.hThread <> 0 then
CloseHandle(ProcessInfo.hThread);
end;
//调用方法
var
ProcID: Cardinal;
begin
ProcID:=0;
RunProcess('backup.bat', SW_HIDE, true, @ProcID);
该代码段定义了一个名为RunProcess的函数,用于在Delphi环境中执行一个外部程序,如backup.bat批处理文件。它接受参数如程序名、显示模式、是否等待和进程ID。函数首先初始化StartupInfo和ProcessInformation结构,然后使用CreateProcess创建新进程。如果等待参数为真,函数会等待进程结束并获取退出码;否则,它将立即返回进程ID。最后,函数确保正确关闭进程和线程句柄。
902






