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
darkmarin

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

Eine *.cmd die startet, aber vorzeitig abbricht!

  Alt 10. Okt 2012, 11:00
Delphi-Version: XE
Hallo an Alle

ich bin seit einiger Zeit dabei und fühle mich sehr wohl hier in diesem Forum.

Bis jetzt habe ich dieses lediglich nur als Nachschlagewerk genutzt,
das ist meine erste Anfrage und es wäre sehr nett wenn ich Unterstützung bekommen könnte.

Bis jetzt reichte immer die Suchfunktion aber jetzt...

wenn ich ein *.cmd direkt in einem Windows Fenster starte dann läuft das Aufgerufene Programm mit allen Parametern fehlerfrei ab.

Starte ich aber aus dem Delphi Programm mit egal welcher version Shellexec... oder CreateProcess... schliesst der Vorgang ohne Fehler vorzeitig ab.

Wie kannich ein solches Windows Fenster nachprogrammieren? Als ob es aus dem Windows heraus gestartet wurde.

Ich hoffe ich konnte mein Problem ausreichend beschreiben.

Grüße
und vielen Dank im voraus

Darko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.225 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 10. Okt 2012, 11:13
Du kannst die CMD.exe starten und ihr via Parameter sagen, daß sie diese CMD ausführen soll (siehe CMD /? )

Hast du denn auch das Arbeitsverzeichnis beim ShellExecute angegeben?


Tipp: Mach einfach mal nach/vor jeder Zeile, in der CMD, eine PAUSE rein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.061 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 10. Okt 2012, 11:19
Mit ShellExecute bzw. CreateProcess wird ja auch nur ein separater Prozess gestartet und der Aufruf kehrt sofort sofort zurück.

Wenn du in deinem Programm auf das Ende dieses Prozesses warten willst, dann musst du das auch tun. Das geht mit einer entsprechenden WaitFor-Anweisung, wobei du an das Process-Handle z.B. bei CreateProcess über den letzten Parameter lpProcessInformation herankommst.

Allerdings ist deine Anwendung dann während des WaitFor blockiert. Man sollte dann entsprechende Vorkehrungen treffen, um das gegebenfalls abzubrechen.

Bei Delphi About gibt es ein Beispiel: http://delphi.about.com/od/windowssh...uteprogram.htm
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
darkmarin

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

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

  Alt 10. Okt 2012, 12:13
Hallo und vielen Dank für die schnelle Unterstützung!

In der *.cmd ist folgender Inhalt

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

Ich bin auf die Ausgabe aus dem Script heraus angewiesen da dort jeweils der Fortschritt dokumentiert wird.
Ich gebe (TCL Script) jeweils mit ECHO und PUTS in die Konsole und das Logfile aus.

WaitForSingleObject(ProcessInfo.hProcess, INFINITE);// hab ich bedacht.

Im Process Explorer ist es so das aus der Konsole die openocd.exe gekillt wird
aus der SchellExecute aber die cmd.exe beendet wird obwohl openocd.exe noch läuft.

Wie formuliere ich den Aufruf das die Konsole bleibt bis alle aus Ihr heraus gestarteten Processe beendet sind?

Ich denke das ist mein Problem.

Liebe Grüße

Darko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.546 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 10. Okt 2012, 12:26
Und wenn Du cmd mit dem Parameter /K startest?
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
 
#6

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

  Alt 10. Okt 2012, 12:42
Hallo Detlef

wie meinst du das?
Jetzt mal nur ein Aufruf als Beispiel.
Delphi-Quellcode:
begin
  if ExecAndWaitUAC('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');
then
Die Funktion ist nicht von mir sondern lediglich die letzte von vielen die ich ausprobiert habe.

Delphi-Quellcode:
function TspecConsole.ExecAndWaitUAC(Filename, Params: Widestring; WindowState: word = SW_SHOWNORMAL): boolean;
var
  ShExecInfoW: SHELLEXECUTEINFOW;
  ShExecInfoA: SHELLEXECUTEINFOA;
  r : Cardinal;
begin
  Result := false;
  if Filename = 'then exit;
  if not FileExists(FileName) then
    exit;
    ZeroMemory(@ShExecInfoW, SizeOf(ShExecInfoW));
    ShExecInfoW.Wnd := GetForegroundWindow;
    ShExecInfoW.cbSize := sizeof(SHELLEXECUTEINFOW);
    ShExecInfoW.fMask := SEE_MASK_NOCLOSEPROCESS;
    ShExecInfoW.lpVerb := 'open';
    ShExecInfoW.lpFile := PWideChar(Filename);
    ShExecInfoW.lpParameters := PWideChar(Params);
    ShExecInfoW.lpDirectory := PWideChar(ExtractFileDir(Filename));
    ShExecInfoW.nShow := WindowState;
    Result := ShellExecuteExW(@ShExecInfoW);

  try
    if Result then
    begin
      r := WaitForSingleObject(ShExecInfoW.hProcess, INFINITE)
    end;
  finally
    //CloseHandle(ShExecInfoW.hProcess);
  end;
end;
Gruß

Darko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

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

  Alt 10. Okt 2012, 12:51
Starte nicht deine exe, sondern die cmd.exe und gib deinen Aufruf nach /k als weiteren Parameter an.

Oder du machst es noch einfacher und liest die Ausgabe des Aufrufs selbst aus und speicherst diese Ausgabe selbst aus Delphi heraus in die c:\AmoLogFiles\Standard.log.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:52 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