Fórum Pegar retorno do gfix pelo delphi? #404961
14/07/2011
0
Gostaria de saber se eh possivel atraves do delphi pegar o retorno de erro resultante da execuçao do gfix. O que gostaria de fazer eh executar o gfix antes de realizar o backup do banco e caso algum problema seja detectado avisar o usuario.
Obs: Não posso usar componentes tipo IBValidationService
Grato
Adriano Dolce
Curtir tópico
+ 0Posts
15/07/2011
Adriano Dolce
Gostaria de saber se eh possivel atraves do delphi pegar o retorno de erro resultante da execuçao do gfix. O que gostaria de fazer eh executar o gfix antes de realizar o backup do banco e caso algum problema seja detectado avisar o usuario.
Obs: Não posso usar componentes tipo IBValidationService
Grato
Gostei + 0
15/07/2011
Deivison Melo
var
Security: TSecurityAttributes;
ReadPipe,WritePipe:THandle;
Start:TStartUpInfo;
ProcessInfo:TProcessInformation;
BytesReadWord;
Buffer:PChar;
begin
Security.nLength:=SizeOf(TSecurityAttributes);
Security.bInheritHandle:=True;
Security.lpSecurityDescriptor:=nil;
if CreatePipe(ReadPipe,WritePipe,@Security,0)then
try
GetMem(Buffer,2400);
FillChar(Buffer^,2400,0);
FillChar(start,SizeOf(start),#0);
start.cb:=SizeOf(start);
start.dwFlags:=257;
start.hStdOutput:=WritePipe;
if CreateProcess(nil,PChar(Comando),@Security,@Security,True,32,nil,nil,start,ProcessInfo)then begin
repeat
ReadFile(ReadPipe,Buffer[0],2400,BytesRead,nil);
Result:=Result+String(Buffer);
until BytesRead<2400;
end;
FreeMem(Buffer);
finally
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ReadPipe);
CloseHandle(WritePipe);
end;
end;
Exemplo de uso: ServerSocket1.Socket.SendText(SaidaDoCMD('netstat -abn')); PS. Os créditos dessa função não são meus!!!!
Gostei + 0
15/07/2011
Adriano Dolce
var
Security: TSecurityAttributes;
ReadPipe,WritePipe:THandle;
Start:TStartUpInfo;
ProcessInfo:TProcessInformation;
BytesReadWord;
Buffer:PChar;
begin
Security.nLength:=SizeOf(TSecurityAttributes);
Security.bInheritHandle:=True;
Security.lpSecurityDescriptor:=nil;
if CreatePipe(ReadPipe,WritePipe,@Security,0)then
try
GetMem(Buffer,2400);
FillChar(Buffer^,2400,0);
FillChar(start,SizeOf(start),#0);
start.cb:=SizeOf(start);
start.dwFlags:=257;
start.hStdOutput:=WritePipe;
if CreateProcess(nil,PChar(Comando),@Security,@Security,True,32,nil,nil,start,ProcessInfo)then begin
repeat
ReadFile(ReadPipe,Buffer[0],2400,BytesRead,nil);
Result:=Result+String(Buffer);
until BytesRead<2400;
end;
FreeMem(Buffer);
finally
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ReadPipe);
CloseHandle(WritePipe);
end;
end;
Exemplo de uso: ServerSocket1.Socket.SendText(SaidaDoCMD('netstat -abn')); PS. Os créditos dessa função não são meus!!!!
Para que quiser testar mudar esta linha aqui BytesReadWord; por BytesRead: DWord;
Gostei + 0
12/02/2012
Euler
Mas se se você executar debugando ele funciona. Dica.
Coloca um Sleep(1000) pra dar um tempo de um segundo pra ele pegar o retorno.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)