Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern (https://www.delphipraxis.net/160957-shellexecute-probleme-bei-der-uebergabe-von-zusaetzlichen-programmparametern.html)

FriendOfDelphi 9. Jun 2011 15:33

Delphi-Version: 5

ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
 
Hallo Allerseits,

ich habe Probleme bei der Übergabe von Parametern, die man dem aufzurufenden Programm mit gibt.
Der eigentliche Aufruf des Programms über
Delphi-Quellcode:
ShellExecute
ist klar:
Delphi-Quellcode:
ShellExecute(Handle, 'open', PChar(DateiName), PChar(Parameter), PChar(VerzeichnisPfad), SW_SHOWNORMAL);
Probleme machen hier die Parameter.
Die da lauten '-h hostname -u username -ppasswort -e "SELECT * FROM datenbank.tabelle" > ausgabe.txt'.
Ziel ist es aus Delphi heraus ein MySQL-Kommando auf der Kommandozeile auszuführen.
Wenn ich das Kommando mit mysql.exe -h hostname -u username -ppasswort -e "SELECT * FROM datenbank.tabelle" > ausgabe.txt direkt aus der cmd-Shell heraus aufrufe, funktiniert alles prima.

Wenn ich die Umleitung in die Datei weglasse (also > ausgabe.txt), funktioniert dies auch aus Delphi heraus.
Das Problem muss also im hinteren Teil des Parameterstrings liegen.
Wahrscheinlich kommt
Delphi-Quellcode:
ShellExecute
nicht mit den Leerzeichen, oder dem "größer als-Zeichen" nach den hinteren doppelten Anführungsstrichen (") klar.

Kann jemand helfen?

Deep-Sea 9. Jun 2011 15:52

AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
 
Wenn mich nicht alles täuscht, dann liegt das Problem an der Umleitung in eine Datei. Das geht hier nicht so einfach. Du musst die Ausgabe selbst abfangen (mal danach googlen) und auch selbst in eine Datei schreiben. :stupid:

DeddyH 9. Jun 2011 15:55

AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
 
Ein Test mit dem Kommando
Code:
cmd /c echo "Hallo Welt" > C:\temp\Bla.txt
(cmd.exe als Programmname, der Rest als Parameter) hat bei mir funktioniert. Evtl. wird die Datei erzeugt, aber nicht im erwarteten Verzeichnis?

jaenicke 9. Jun 2011 17:14

AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
 
Dass die cmd.exe pipen kann, ist klar, nur halt nicht das andere Programm. Klar kann man das wiederum über die cmd.exe aufrufen, damit pipen geht statt die Ausgabe selbst einzufangen, aber das wäre irgendwie... unnötig...

FriendOfDelphi 9. Jun 2011 18:26

AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
 
Zitat:

Zitat von DeddyH (Beitrag 1105507)
Ein Test mit dem Kommando
Code:
cmd /c echo "Hallo Welt" > C:\temp\Bla.txt
(cmd.exe als Programmname, der Rest als Parameter) hat bei mir funktioniert. Evtl. wird die Datei erzeugt, aber nicht im erwarteten Verzeichnis?

Das habe ich auch erst gedacht. Aber ein Suchlauf auf den in Frage kommenden Laufwerken brachte kein Ergebnis.

Beim Ausführen "blitzt" ganz kurz ein cmd-Fenster auf. Wenn man das mehrere Male hintereinander macht, kann man sehen, dass die Datei zwar ausgeführt wird, aber eine Fehlermeldung ausgegeben wird. Diese kann ich leider nicht lesen, da das Ganze zu schnell geht und ich keinen Aufrufparameter für
Delphi-Quellcode:
ShellExecute
gefunden habe, der das Fenster offen läßt.
Wie gesagt, ich denke, dass die Parameter von
Delphi-Quellcode:
ShellExecute
nicht richtig an das Programm weitergereicht werden.

FriendOfDelphi 9. Jun 2011 18:28

AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
 
Zitat:

Zitat von jaenicke (Beitrag 1105524)
Dass die cmd.exe pipen kann, ist klar, nur halt nicht das andere Programm. Klar kann man das wiederum über die cmd.exe aufrufen, damit pipen geht statt die Ausgabe selbst einzufangen, aber das wäre irgendwie... unnötig...

Deine Antwort verstehe ich nicht so ganz.
"mysql.exe" kann definitiv pipen.
Direkt aus einem cmd-Fenster aufgerufen funktiniert ja alles.
Wie meinst Du das?

FriendOfDelphi 9. Jun 2011 18:30

AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
 
Zitat:

Zitat von Deep-Sea (Beitrag 1105505)
Wenn mich nicht alles täuscht, dann liegt das Problem an der Umleitung in eine Datei. Das geht hier nicht so einfach. Du musst die Ausgabe selbst abfangen (mal danach googlen) und auch selbst in eine Datei schreiben. :stupid:

Kannst Du das bitte mal etwas näher erläutern.

jaenicke 9. Jun 2011 19:47

AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
 
Zitat:

Zitat von FriendOfDelphi (Beitrag 1105535)
"mysql.exe" kann definitiv pipen.

Irrtum.

Zitat:

Zitat von FriendOfDelphi (Beitrag 1105535)
Direkt aus einem cmd-Fenster aufgerufen funktiniert ja alles.

Du sagst es, du bist innerhalb der cmd.exe, und die kennt das Pipe-Zeichen, ja. ;-)

Du musst das Pipen, also das Auslesen der Ausgabe aus den Ausgabepipes, selbst übernehmen:
http://www.delphi-treff.de/tipps/sys...ramm-anzeigen/
usw.

Aphton 9. Jun 2011 19:55

AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
 
Oder er ruft cmd mit eben genau diesen Parametern auf:
ShellExecute(0, 'open', 'cmd /C ', 'mysql.exe -h hostname -u username -ppasswort -e "SELECT * FROM datenbank.tabelle" > ausgabe.txt', NIL, SW_SHOWNORMAL)

FriendOfDelphi 10. Jun 2011 08:03

AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
 
Zitat:

Zitat von jaenicke (Beitrag 1105558)
Zitat:

Zitat von FriendOfDelphi (Beitrag 1105535)
"mysql.exe" kann definitiv pipen.

Irrtum.

Zitat:

Zitat von FriendOfDelphi (Beitrag 1105535)
Direkt aus einem cmd-Fenster aufgerufen funktiniert ja alles.

Du sagst es, du bist innerhalb der cmd.exe, und die kennt das Pipe-Zeichen, ja. ;-)

Du musst das Pipen, also das Auslesen der Ausgabe aus den Ausgabepipes, selbst übernehmen:
http://www.delphi-treff.de/tipps/sys...ramm-anzeigen/
usw.

Ok, stimmt. Nicht mysql.exe, sondern cmd.exe verarbeitet das Pipe-Zeichen.
Aber so ganz verstehe ich das noch nicht.
Ich dachte, die Funktion
Delphi-Quellcode:
ShellExecute
ruft genau cmd.exe auf und ich befinde mich dann innerhalb dieser Shell?:?:
Und darin wird dann das Programm mysql.exe gestartet mit den Parametern, die ich zusätzlich übergeben habe.
Wo ist da mein Denkfehler?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 Uhr.
Seite 1 von 2  1 2      

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