AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Eine *.cmd die startet, aber vorzeitig abbricht!
Thema durchsuchen
Ansicht
Themen-Optionen

Eine *.cmd die startet, aber vorzeitig abbricht!

Ein Thema von darkmarin · begonnen am 10. Okt 2012 · letzter Beitrag vom 16. Okt 2012
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#11

AW: Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 14:20
Wenn Du bei CreateProcess mit Pipes versorgst, müsste der Aufruf funktionieren und die Ausgabe über die Pipe direkt abrufbar sein ...
StartupInfo.hStdOutput := PipeOutputWrite;
StartupInfo.hStdError := PipeErrorsWrite;


In dem Code hier sind die IMHO benötigten Info's...

http://www.delphipraxis.net/152490-w...tionieren.html
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#12

AW: Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 14:39
Müsste es ShellExecute(0, 'open', 'cmd.exe', PChar('/K c:\openocd-0.5.0\bin\openocd-0.5.0.exe -f c:\openocd-0.5.0\interface\jtagkey.cfg -f C:\openocd-0.5.0\WORK\jtag_ertec\ertec200.cfg -c "global SOURCE" -c "set SOURCE 4377FC_105.bin" -f c:/FknFile/4377FC_105.scr > c:\AmoLogFiles\Standard.log'), nil, nil, SW_SHOW); nicht auch tun?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
darkmarin

Registriert seit: 26. Sep 2011
23 Beiträge
 
Delphi XE3 Professional
 
#13

AW: Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 15:09
Hallo hab da ganze mal mit memos aufgebaut.

Ok mit der Ausgabe über Pipes klappt,
Aber wie den Aufruf übergeben das die Abhängigkeiten stimmen?

Delphi-Quellcode:
function TForm1.GetConsoleOutput(const Command : string;
                          Output, Errors : TStringList) : Boolean;
var
  Buffer : array[0..1024] of Char;
  CreationFlags : DWORD;
  NumberOfBytesRead : DWORD;
  PipeErrorsRead : THandle;
  PipeErrorsWrite : THandle;
  PipeOutputRead : THandle;
  PipeOutputWrite : THandle;
  ProcessInfo : TProcessInformation;
  SecurityAttr : TSecurityAttributes;
  StartupInfo : TStartupInfo;
  Stream : TMemoryStream;
begin
  //Initialisierung ProcessInfo
  FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);

  //Initialisierung SecurityAttr
  FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0);
  SecurityAttr.nLength := SizeOf(TSecurityAttributes);
  SecurityAttr.bInheritHandle := True;
  SecurityAttr.lpSecurityDescriptor := nil;

  //Pipes erzeugen
  CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0);
  CreatePipe(PipeErrorsRead, PipeErrorsWrite, @SecurityAttr, 0);

  //Initialisierung StartupInfo
  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  StartupInfo.cb := SizeOf(TStartupInfo);
  StartupInfo.hStdInput := 0;
  StartupInfo.hStdOutput := PipeOutputWrite;
  StartupInfo.hStdError := PipeErrorsWrite;
  StartupInfo.wShowWindow := SW_HIDE;
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;

  CreationFlags := CREATE_DEFAULT_ERROR_MODE or
                   CREATE_NEW_CONSOLE or
                   NORMAL_PRIORITY_CLASS;

  if CreateProcess(nil,
                   PChar(Command),
                   nil,
                   nil,
                   True,
                   CreationFlags,
                   nil,
                   nil,
                   StartupInfo,
                   ProcessInfo) then
  begin
    Result := True;
    //Write-Pipes schließen
    CloseHandle(PipeOutputWrite);
    CloseHandle(PipeErrorsWrite);

    //Ausgabe Read-Pipe auslesen
    Stream := TMemoryStream.Create;
    try
      while ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil) do
      begin
        Stream.Write(Buffer, NumberOfBytesRead);
      end;
      Stream.Position := 0;
      Output.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;
    CloseHandle(PipeOutputRead);

    //Fehler Read-Pipe auslesen
    Stream := TMemoryStream.Create;
    try
      while ReadFile(PipeErrorsRead, Buffer, 255, NumberOfBytesRead, nil) do
      begin
        Stream.Write(Buffer, NumberOfBytesRead);
      end;
      Stream.Position := 0;
      Errors.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;
    CloseHandle(PipeErrorsRead);

    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    CloseHandle(ProcessInfo.hProcess);
  end
  else
    begin
      Result := False;
      CloseHandle(PipeOutputRead);
      CloseHandle(PipeOutputWrite);
      CloseHandle(PipeErrorsRead);
      CloseHandle(PipeErrorsWrite);
    end;
end;
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
   var
  Output : TStringList;
  Errors : TStringList;
begin
  Output := TStringList.Create;
  Errors := TStringList.Create;
  try
    if GetConsoleOutput(AdvEdit1.Text, Output, Errors) then
      Memo1.Lines.AddStrings(Output);
      Memo2.Lines.AddStrings(Errors);
  finally
    Output.free;
    Errors.free;
  end;
end;
Ich steh auf dem Schlauch.


Gruß

Darko
  Mit Zitat antworten Zitat
darkmarin

Registriert seit: 26. Sep 2011
23 Beiträge
 
Delphi XE3 Professional
 
#14

AW: Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 15:10
Hallo Detlef

probier ich sofort aus!
  Mit Zitat antworten Zitat
darkmarin

Registriert seit: 26. Sep 2011
23 Beiträge
 
Delphi XE3 Professional
 
#15

AW: Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 15:54
Hallo Detlef

das Fenster bleibt stehen
aber das Programm bricht an der gleichen Stelle,
wie in den vorherigen Versuchen,
vorzeitig ab.

Teilauszug... aus der Konsole
************************************************** ***************************
Error: couldn't open 4377FC_105.bin
Runtime Error: c:/FknFile/4377FC_105.scr:298:
in procedure 'script'
at file "embedded:startup.tcl", line 58
in procedure 'flash' called at file "c:/FknFile/4377FC_105.scr", line 298
************************************************** ***************************

Das scheint das Problem zu sein wenn ich es über ShellEx... oder CreatePro... ablaufen lasse.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#16

AW: Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 15:59
Das sieht so aus, als ob ein Bildschirmschoner auf eine Datei zugreifen will, die es nicht gibt oder die momentan gesperrt ist oder oder. Kannst Du im SET SOURCE-Aufruf einen absoluten Pfad angeben?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
darkmarin

Registriert seit: 26. Sep 2011
23 Beiträge
 
Delphi XE3 Professional
 
#17

AW: Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 16:31
Ich habe den Pfad mit angegeben macht aber keinen Unterschied.
Der Fehler bleibt.

couldn't open 43.bin ...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#18

AW: Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 16:33
Funktioniert es denn, wenn Du den ursprünglichen Befehl (also alles nach dem "/K") über Start-Ausführen absetzt? Es scheint ja irgend ein Problem beim Öffnen dieser bin zu geben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
darkmarin

Registriert seit: 26. Sep 2011
23 Beiträge
 
Delphi XE3 Professional
 
#19

AW: Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 16:39
Nein, gleicher Fehler.

Funktioniert nur wenn ich direkt in einer Konsole starte.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 16:40
Naja, in dem geposteten Quelltext wird als Arbeitsverzeichnis "nichts" angegeben (nil). Wenn du auf der Konsole startest, ist das dann das Verzeichnis, in dem du da bist.

Ich vermute mal das musst du noch setzen...
Siehe Doku von CreateProcess:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 05:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz