Fórum Executar programa externo e esperar a sua finalização #344363
10/08/2007
0
Eu preciso executar o programa de instalação do sysbase dentro de um programa que eu criei e esperar a sua finalização para poder executar outro comando. Achei a função ´ExecAndWait´ que deveria fazer isso. Outros programas que eu tento executar dentro desta função ele funciona perfeitamente, mas a instalação do sysbase ele só a instalação quando fecho o programa que executou ele, senão ele fica pensando.
Se alguem souber o problema ou tiver outa forma de executar isso.
function WinExecAndWait32(FileName: String;
Visibility: integer): integer;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
wAux:cardinal;
begin
wAux := 0;
StrPCopy(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
begin
Result := -1;
end
else
begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,wAux);
end;
end;
Se alguem souber o problema ou tiver outa forma de executar isso.
function WinExecAndWait32(FileName: String;
Visibility: integer): integer;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
wAux:cardinal;
begin
wAux := 0;
StrPCopy(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
begin
Result := -1;
end
else
begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,wAux);
end;
end;
Acacio
Curtir tópico
+ 0
Responder
Posts
12/08/2007
Micheus
[b:5f063e9248]Acacio[/b:5f063e9248], eu tenho um exemplo ´ligeiramente´ diferente que utilizei como teste para abrir documentos e aguardar seu fechamento para dar prosseguimento ao programa. Eu dei uma alterada, colocando um executável para ser iniciado, e aparentemente, funciona da forma como vc precisa.
Se quiser verificar, baixe deste [url=http://www.4shared.com/file/21885985/e937f22a/Processos.html]link[/url]
Abraços
Se quiser verificar, baixe deste [url=http://www.4shared.com/file/21885985/e937f22a/Processos.html]link[/url]
Abraços
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)