AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Aus Konsolenanwendung Programm starten und Ergebnis auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Aus Konsolenanwendung Programm starten und Ergebnis auslesen

Offene Frage von "VizeTE"
Ein Thema von VizeTE · begonnen am 11. Jan 2006 · letzter Beitrag vom 11. Jan 2006
 
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#1

Aus Konsolenanwendung Programm starten und Ergebnis auslesen

  Alt 11. Jan 2006, 10:25
Hallo,

ich möchte mit meiner Konsolenanwendung eine andere Konsolenanwendung starten und dann das Ergebnis einlesen. Bei der Delphi-Hilfe habe ich mir abgeguckt wie ich in der Konsole einen einfachen Text eingebe und den dann auslese:

Delphi-Quellcode:
procedure Test;
var
  AString: string;
begin
  Write('Enter a line of text: ');
  ReadLn(AString);
  WriteLn('You typed: ', AString);
  WriteLn('Hit <Enter> to exit');
  ReadLn;
end;
Niko hat mir in einem anderen Thread bereits gezeigt wie ich die Standardausgabe einlesen kann wenn meine Konsolenanwendung von einem anderen Prozess gestartet wird. Das Funktioniert auch prima.

Jetzt soll mein Konsolenprogramm aber selbst einen anderen Prozess starten und anschließend dessen Ergebnis auslesen.
Ich habe versucht das mit ShellExecuteEx hinzubekommen, leider mit wenig Erfolg.

Zum Hintergrund: Ich verwende Subversion und möchte mit meiner Konsolenanwendung Subversion nach einer Eigenschaft meiner Head-Revision fragen. Wenn ich das in der Kommandozeile eingebe sieht der Befehl wie folgt aus:

svn propget svn:log c:\projekte\test\repositorytest --revprop -r 6 Als Antwort bekomme ich eine neue Zeile in der Konsole mit dem Wert der angeforderten Eigenschaft und genau diese möchte ich gern einlesen und weiterverarbeiten.

Mein bisheriger Code sieht so aus:

Delphi-Quellcode:
procedure TestRun;
var
  ALine: string;
begin
  if RunExecutableAndWait('svn', 'propget svn:log c:\projekte\test\repositorytest --revprop -r 6') then
    ReadLn(ALine)
  else
    ALine := SysErrorMessage(GetLastError);
  WriteLn('Result: ', ALine);
  WriteLn('Hit <Enter> to exit');
  ReadLn;
end;

function RunExecutableAndWait(AExecutable, AParams: string): boolean;
var
  AProcessHandle : dword;
  AShellExecInfo : TShellExecuteInfo;
begin
  Result := false;

  FillChar(AShellExecInfo, SizeOf(AShellExecInfo), 0);

  with AShellExecInfo do
  begin
    cbSize := SizeOf(AShellExecInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    lpVerb := 'open';
    lpFile := PChar(AExecutable);
    lpParameters := PChar(AParams);
  end;

  if ShellExecuteEx(@AShellExecInfo) then
    AProcessHandle := AShellExecInfo.HProcess
  else
    Exit;

  while WaitForSingleObject(AProcessHandle, 50) <> WAIT_OBJECT_0 do
    Sleep(100);

  CloseHandle(AProcessHandle);

  Result := true;
end;
Funktioniert aber leider nicht.


Schon mal vielen Dank im Voraus!
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz