| Autor |
Nachricht |
Addy88
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Di 29.11.11 00:38
Hallo zusammen,
ich hab mal wieder ein Poblem, ich versuche Apache-Ant aus Delphi heraus aufzurufen. Das sieht wie folgt aus:
wenn ich die Ausgabe des Edit Feldes in die CMD eingebe dann läuft das auch, allerdings bekomme ich wenn ich das ShellExecute ausführe immer den RetunCode=2
Weiß hier einer Rat?
Danke im voraus.
|
| |
|
|
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
|
|
SvenAbeln
      
Beiträge: 328
Erhaltene Danke: 2
|
Verfasst: Di 29.11.11 02:36
Die Parameter für das aufgerufene Programm gehören im Aufruf in einen eigenen Parameter:
|
| |
|
|
Addy88 
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Di 29.11.11 19:47
Hi,
danke erstmal, allerdings funktioniert es so immernoch nicht.
Nun bekomm ich den ReturnCode 42.
Wenn ich die Ausgabe der beiden Variablen in der CMD ausführe funktioniert es wieder.
|
| |
|
|
jaenicke
      
Beiträge: 15841
Erhaltene Danke: 741
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
|
Verfasst: Di 29.11.11 20:15
|
| |
|
|
Addy88 
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Di 29.11.11 20:24
Also das Ant Script schreibt bei der Ausführung direkt ein log, und ich habe fürs testen erstmal einen sleep Task von 2 Minuten eingebaut.
Allerdings wird das log nicht geschrieben und auch das sleep wird scheinbar nicht ausgeführt da ich direkt nach dem klick auf den Start Button die Message mit dem ReturnCode bekomme.
Ich geh ja mal stark davon aus das shellexecute solange wartet bis das aufgerufene Programm ausgeführt wurde?!
Edit:
wenn ich bei parameter noch ">> test.log" anhänge schreibt er mir ein leeres file
|
| |
|
|
jaenicke
      
Beiträge: 15841
Erhaltene Danke: 741
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
|
Verfasst: Di 29.11.11 20:37
Addy88 hat folgendes geschrieben : | | Ich geh ja mal stark davon aus das shellexecute solange wartet bis das aufgerufene Programm ausgeführt wurde?! |
Nein, warum sollte es? Das würde ja alles blockieren.
// EDIT:
Versuche als Befehl doch einmal die cmd.exe mit deinem Befehl als Parameter. Dann kannst du die gesamte Ausgabe in eine Datei schreiben. Davon abgesehen kannst du auch einfach die Ausgabe des Aufrufs einmal auslesen, Code dafür findest du über die Suche.
|
| |
|
|
Addy88 
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Di 29.11.11 21:00
Ich habs jetzt mal so gemacht:
Das logfile bleibt trotzdem leer.
Also es sieht mir so aus als würde er zwar die ant.bat aufrufen aber nichts übergeben
|
| |
|
|
jaenicke
      
Beiträge: 15841
Erhaltene Danke: 741
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
|
Verfasst: Di 29.11.11 21:04
Du solltest dir erstmal die Parameter der cmd.exe anschauen...
Da fehlt ein /c vor dem auszuführenden Befehl...
|
| |
|
|
Addy88 
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Di 29.11.11 21:05
Sorry, du hast natürlich recht.... Wird langsam schlimm mit mir -.- Moderiert von Narses: Beiträge zusammengefasst
So nun seh ich kurz ein CMD Fenster aufblinken welches sich sofort wieder schließt, das log bleibt leer.
An der maskierung der variablen in params kann es nicht liegen?
|
| |
|
|
jaenicke
      
Beiträge: 15841
Erhaltene Danke: 741
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
|
Verfasst: Di 29.11.11 21:11
Dann probiere /k statt /c damit es da bleibt. 
|
| |
|
|
Addy88 
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Di 29.11.11 21:19
 wieder was gelernt
wir kommen der sache näher:
Der Befehl "C:\Program" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
ant_home hat Wert:
C:\Program Files (x86)\NetBeans 7.0.1\java\ant
Und sollte ja anhand der " passend maskiert werden damit in der CMD eben die Leerzeichen nicht stören
|
| |
|
|
Addy88 
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Do 08.12.11 13:43
So nach langem hin und her probieren bin ich immer noch nicht zu einem funktionierendem Ergebnis gekommen.
Ich habs jetzt mal so gemacht um zu sehen ob die Maskierung von Pfaden mit Leerzeichen funktioniert:
Da ich in der Kommandozeile jedoch immer den folgenden Fehler bekomme, scheint es, als ob mit der Maskierung definitiv irgendwas verkehrt ist:
"Der Befehl "c:\Program" ist entweder falsch geschrieben oder konnte nicht gefunden werden."
Hat hier denn keiner noch irgendeine Idee?
|
| |
|
|
bummi
      
Beiträge: 979
Erhaltene Danke: 124
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 08.12.11 14:00
der Teil bis "+project+" sollte funktionieren, stecken in den Variablen auch noch nicht gequotete Pfadangaben?
_________________ Das Problem liegt üblicherweise zwischen den Ohren
DRY DRY KISS
|
| |
|
|
Addy88 
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Do 08.12.11 14:14
Hey, nein in den folgenden Variablen sind keine Pfadangaben mehr enthalten. "c:\Program Files (x86)\NetBeans 7.0.1\java\ant\bin\ant.bat" ist die einzigste Pfadangabe die so beginnt, nach -f ist noch eine aber da sind in der jetzigen Variante keine Leerzeichen drin. Deswegen sieht es mir eben so aus als ob die "" am Anfang schon komplett ignoriert werden. Wenn ich "c:\Program Files (x86)\NetBeans 7.0.1\java\ant\bin\ant.bat" allerdings als auszuführende Datei angebe wird die ant.bat aufgerufen allerdings sofort wieder geschlossen da keine Parameter übergeben wurden. Also ist meine Vermutung das es lediglich bei der Parameterübergabe ein Problem mit der Maskierung gibt.
|
| |
|
|
jaenicke
      
Beiträge: 15841
Erhaltene Danke: 741
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
|
Verfasst: Do 08.12.11 14:19
Das Problem ist, dass bereits bei der ersten Parameterübergabe (an die cmd.exe) die Anführungszeichen entfernt werden. Diese setzt die nicht wieder.
Erstelle eine temporäre Batchdatei und führe die aus oder starte eine cmd.exe permanent und übergib die Befehle per Pipe. Letzteres geht mit TDosCommand oder so ähnlich sehr einfach.
|
| |
|
|