procedure Ejecutar(sApp: String; Esperar: Cardinal; Visible: Boolean);
var
StarInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
FillChar(StarInfo, SizeOf(TStartupInfo), 0);
StarInfo.cb := SizeOf(TStartupInfo);
if not Visible then
begin
StarInfo.dwFlags := STARTF_USESHOWWINDOW;
StarInfo.wShowWindow := SW_HIDE;
end;
if CreateProcess(nil, PChar(sApp), nil, nil, False, NORMAL_PRIORITY_CLASS,
nil, PChar(ExtractFilePath(sApp)), StarInfo, ProcInfo) then
begin
WaitForSingleObject(ProcInfo.hProcess, Esperar);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end
else
if CreateProcess(nil, PChar(sApp), nil, nil, False, NORMAL_PRIORITY_CLASS,
nil, nil, StarInfo, ProcInfo) then
begin
WaitForSingleObject(ProcInfo.hProcess, Esperar);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end
else
ShowMessage(SysErrorMessage(GetLastError));
end;
Ejecutar('C:\archivo.bat parametros', Infinite, True);
Ejecutar('C:\archivo.bat parametros', 0, True);