Einzelnen Beitrag anzeigen

shebang

Registriert seit: 7. Feb 2020
101 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: ShellExecuteEx + TerminateProcess

  Alt 23. Apr 2021, 15:53
Der beste Ansatz ist vermutlich hier zu finden: https://www.delphipraxis.net/169697-...t-ausgabe.html, allerdings kann ich dort nicht erkennne, wie dort der gestartete Prozess beendet werden kann.
Vielen Dank, das hat mich zu meiner Lösung gebracht. Mir war nicht bewusst, dass man über die Pipes von CreateProcess auch eine Datei angeben kann. Es funktioniert jetzt genau so wie ich es mir vorgestellt habe.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  StartupInfo : TStartupInfo;
  SecAttr : TSecurityAttributes;
  command : string;
  filename : string;
begin
  command := 'ping.exe -t delphipraxis.net';
  filename := 'D:\output.txt';

  ZeroMemory(@SecAttr, SizeOf(TSecurityAttributes));
  SecAttr.nLength := SizeOf(SecAttr);
  SecAttr.bInheritHandle := True;
  fileHandle := CreateFile(PChar(filename), GENERIC_WRITE, FILE_SHARE_WRITE, @SecAttr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

  ZeroMemory(@StartupInfo, SizeOf(TStartupInfo));
  StartupInfo.cb := SizeOf(TStartupInfo);
  StartupInfo.hStdOutput := fileHandle;
  StartupInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_HIDE;

  CreateProcess(nil, PChar(command), nil, nil, TRUE, 0, nil, nil, StartupInfo, ProcessInfo);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  TerminateProcess(ProcessInfo.hProcess, 0);
  CloseHandle(fileHandle);
  CloseHandle(ProcessInfo.hThread);
  CloseHandle(ProcessInfo.hProcess);
end;
  Mit Zitat antworten Zitat