Autor Beitrag
gangasrotogati
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 28.05.08 17:54 
Ich möchte ein Kommandozeilen-Programm von Delphi aus starten (primitive Fernsteuerung ohne Abfangen der Ausgaben). Mit Shellexecute ist das auch im Prinzip kein Problem, nur kann das Programm nicht richtig ausgeführt werden, weil die PATH-Umgebungsvariable nicht gesetzt ist.
Also habe ich versucht, stattdessen eine bat-Datei mit folgendem Inhalt auszuführen:

SET PATH=...Dateipfade...
programm.exe

Allerdings erschien auch in diesem Fall die gleiche Fehlermeldung.
Verblüffenderweise funktioniert es, wenn ich eine Shell von Hand starte und dann diese Batch-Datei ausführe - aber nicht, wenn ich die Batch-Datei direkt per Doppelklick ausführe. Es klappt außerdem auch, wenn ich eine neue erste Zeile mit "CMD" in die Batch-datei hinzufüge - dann muß ich allerdings die neue (innerhalb der shell ausgeführte) shell mit "exit" beenden, damit das Programm ausgeführt wird. Diese beiden Lösungen sind natürlich nicht das was ich will.

Ich habe auch schon die TDosCommand-Komponente ausprobiert, aber auch da habe ich das gleiche Problem mit dem Setzen der Umgebungsvariable.


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Do 29.05.2008 um 00:26
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Mi 28.05.08 19:05 
Hallo,

vor Jahren hatte ich gleiches Problem, damals Clipper zusammen mit Windows NT statt Windows 95.

Abhilfe war der folgende Aufruf einer Batchdatei, so dass die Umgebungsvariablen vorhanden sind und der Prozess auch beendet wird.


Aufruf: cmd /c start x.bat

Also lade die cmd.exe und gib "/c start x.bat" als Parameter.

Bei mir hat es so funktioniert.

bye

Markus
gangasrotogati Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 28.05.08 20:22 
Titel: wäre zu schön gewesen...
bei mir klappt es leider nicht.
Mir ist dabei noch eine andere Merkwürdigkeit aufgefallen: Wenn ich das Programm zweimal hintereinander in der batch-Datei aufrufe, erscheint die Fehlermeldung wegen fehlender Umgebungsvariablen nur beim ersten Mal - beim zweiten Mal wird das Programm korrekt ausgeführt...?
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Mi 28.05.08 20:31 
Hallo,

nun ich habe so dos programme in PATH Verzeichnissen nachladen koennen.

cmd /c start ansicht.exe

laedt z.B. ansicht.exe nach, wobei sie ansicht.exe in einem anderen Pfad aus der SET PATH Evironment Varible befand.

Zeige doch einfach mal Deine Batchdatei,den Aufruf aus Delphi und den Inhalt der Environmentvariblen, vielleicht weiss ja jemand Rat hier.

bye

Markus
gangasrotogati Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 28.05.08 21:15 
Mein Aufruf in Delphi sieht so aus:
ausblenden Delphi-Quelltext
1:
Shellexecute(handle, 'open''cmd', pchar(' /c start load.bat'), NIL, SW_SHOW);					

Der Inhalt der Batch-Datei:
ausblenden Quelltext
1:
2:
SET PATH=C:\Dev-Cpp\bin\;C:\Perl\site\bin;C:\Perl\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\devcpp\Bin;C:\Program Files\GnuWin32\lib;C:\Program Files\GnuWin32;C:\Program Files\GnuWin32\include;C:\Program Files\GnuWin32\bin\
analyse.exe input.txt

wobei analyse.exe das auszuführende Programm ist und input.txt ein Parameter von diesem Programm (die Eingabedatei).

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Mi 28.05.08 22:30 
Hallo,

es sollte so funktionieren.

ausblenden Delphi-Quelltext
1:
Shellexecute(handle,'open','cmd',pchar('/c start analyse.exe input.txt'), NIL, SW_SHOW);					


Habe auf meinem PC z.B. den Aufruf eines alten Doseditors E.exe (Datei liegt im Path Verzeichnis) mit Parameter c:\x.txt getestet.

Der Aufruf
ausblenden Delphi-Quelltext
1:
Shellexecute(handle,'open','cmd',pchar('/c start e.exe c:\x.txt'), NIL, SW_SHOW);					

lief dabei fehlerlos.

bye

Markus
gangasrotogati Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 28.05.08 22:49 
diese Variante hatte ich schon mal probiert - dabei erhalte ich aber auch den Fehler, daß die "libgsl.dll" nicht gefunden wurde (der Fehler erscheint immer wenn die Pfadvariable nicht gesetzt ist).
Die libgsl.dll ins Anwendungsverzeichnis zu kopieren nützt auch nichts, weil dann immer noch andere Pfade nicht gefunden werden.
Trotzdem danke erstmal soweit.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Ich habe jetzt über das Programm "PE dependency explorer" alle benötigten dll-Dateien identifiziert und ins Anwendungsverzeichnis kopiert, aber trotzdem erscheint noch eine Fehlermeldung, wenn ich die bat-datei direkt starte ("The instruction at "0x77c1beab" referenced memory at "0x65544b69". The memory could not be "read")...

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Habe jetzt das Problem gefunden:
Es klappt, wenn ich in der bat-Datei "%SystemRoot%\system32" durch den vollständigen Pfad "C:\Windows\System32" ersetze.

Auf Dauer wäre es natürlich schön alle benötigten dlls direkt in das Programm oder den Anwendungsordner einzubinden, aber das frage ich vielleicht später mal in einem anderen Beitrag.

Danke für die vielen Hinweise!