Como executar um programa no PostBuild evento em paralelo?
-
23-09-2019 - |
Pergunta
Eu consegui definir o compilador para executar outro programa quando o projeto é criado/correu com a seguinte diretiva no projeto de opções:
call program.exe param1 param2
O problema é que o compilador executa "program.exe" e espera encerrar e, em SEGUIDA, o projeto executável é executado.
O que eu pergunto:Como configurar o compilador para executar os dois arquivos executáveis em paralelo, sem esperar por PostBuild evento para terminar?
Obrigado antecipadamente
Solução
Eu não tenho nenhuma idéia de como o IDE gere aguardar o término dos processos iniciados por "iniciar", mas chamar "CreateProcess" na sua forma mais simples em seu próprio programa starter parece servir.
Compilação de hts.como;
program starter;
{$APPTYPE CONSOLE}
uses
sysutils, windows;
var
i: Integer;
CmdLine: string;
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
try
if ParamCount > 0 then begin
CmdLine := '';
for i := 1 to ParamCount do
CmdLine := CmdLine + ParamStr(i) + ' ';
ZeroMemory(@StartInfo, SizeOf(StartInfo));
StartInfo.cb := SizeOf(StartInfo);
ZeroMemory(@ProcInfo, SizeOf(ProcInfo));
if not CreateProcess(nil, PChar(CmdLine), nil, nil, False,
NORMAL_PRIORITY_CLASS, nil, nil, StartInfo, ProcInfo) then
raise Exception.Create(Format('Failed to run: %s'#13#10'Error: %s'#13#10,
[CmdLine, SysErrorMessage(GetLastError)]));
end;
except
on E:Exception do begin
Writeln(E.ClassName + ', ' + E.Message);
Writeln('... [Enter] to dismiss ...');
Readln(Input);
end;
end;
end.
e, em seguida, no PostBuild colocar:
"X:\...\starter.exe" "X:\...\program.exe" param1 param2
Outras dicas
Em vez de chamar program.exe, uso de início program.exe
Criar um arquivo bat.Colocar alguns comandos com início, como Alan sugeriu:
start program.exe param1 param2
start program.exe param1 param2
start program.exe param1 param2
start program.exe param1 param2
Em seguida, chamar este arquivo bat.