![]() |
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:
ist klar:
ShellExecute
Delphi-Quellcode:
Probleme machen hier die Parameter.
ShellExecute(Handle, 'open', PChar(DateiName), PChar(Parameter), PChar(VerzeichnisPfad), SW_SHOWNORMAL);
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:
nicht mit den Leerzeichen, oder dem "größer als-Zeichen" nach den hinteren doppelten Anführungsstrichen (") klar.
ShellExecute
Kann jemand helfen? |
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:
|
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Ein Test mit dem Kommando
Code:
(cmd.exe als Programmname, der Rest als Parameter) hat bei mir funktioniert. Evtl. wird die Datei erzeugt, aber nicht im erwarteten Verzeichnis?
cmd /c echo "Hallo Welt" > C:\temp\Bla.txt
|
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...
|
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Zitat:
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:
gefunden habe, der das Fenster offen läßt.
ShellExecute
Wie gesagt, ich denke, dass die Parameter von
Delphi-Quellcode:
nicht richtig an das Programm weitergereicht werden.
ShellExecute
|
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Zitat:
"mysql.exe" kann definitiv pipen. Direkt aus einem cmd-Fenster aufgerufen funktiniert ja alles. Wie meinst Du das? |
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Zitat:
|
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Zitat:
Zitat:
Du musst das Pipen, also das Auslesen der Ausgabe aus den Ausgabepipes, selbst übernehmen: ![]() usw. |
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) |
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Zitat:
Aber so ganz verstehe ich das noch nicht. Ich dachte, die Funktion
Delphi-Quellcode:
ruft genau cmd.exe auf und ich befinde mich dann innerhalb dieser Shell?:?:
ShellExecute
Und darin wird dann das Programm mysql.exe gestartet mit den Parametern, die ich zusätzlich übergeben habe. Wo ist da mein Denkfehler? |
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
ShellExecute ruft das mit der angegebenen Datei und dem angegebenen Befehl verknüpfte Programm auf, sofern vorhanden.
|
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Zitat:
Delphi-Quellcode:
damit zurück gibt, lautet 2 (SE_ERR_FNF = 2, 'Datei wurde nicht gefunden Quelle:
ShellExecute
![]() Ich verstehe das auch noch nicht so ganz. mysql.exewird doch schon mit
Delphi-Quellcode:
in der Kommando-Shall (cmd.exe) aufgerufen.
ShellExecute
|
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Wie ist es denn so (da war wohl ein Parameter verrutscht)?
Delphi-Quellcode:
ShellExecute(0, 'open', 'cmd.exe', '/C mysql.exe -h hostname -u username -ppasswort -e "SELECT * FROM datenbank.tabelle" > ausgabe.txt', NIL, SW_SHOWNORMAL)
|
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Wenn du die Ausgabe sehen willst, musst du die Konsole von Hand über Start/Ausführen öffnen und dort den kompletten Befehle eintippen.
Wenn Shellexecute die Datei nicht findet und du keinen Pfad zur Datei angegeben hast, liegt sie wahrscheinlich nicht im Suchpfad. Gib einen Pfad zur Datei an. Genauso solltest du einen Pfad zur Ausgabedatei angeben, sonst landet die Datei irgendwo. Denn wenn ich eine Konsole über Start/Ausführen öffne, ist das aktuelle Verzeichnis mein Benutzerverzeichnis. |
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Zitat:
Vielleicht kann ja ein Wissender nochmal abschließend und etwas ausführlicher mit etwas Hintergrundwissen zu
Delphi-Quellcode:
erklären, warum das genau so gemacht werden muss...
ShellExecute
|
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Das Problem ist, dass die Dateiumleitung eine "Spezialität" von %comspec% (also meist cmd.exe) ist. Deshalb musst Du auch diese starten. Was bei ShellExecute geschieht ist ja Folgendes (ich hoffe, ich gebe das jetzt korrekt wieder):
Zunächst wird die Dateiendung der übergebenen Datei daraufhin untersucht, ob sie registriert ist (Eintrag unter z.B. HKCL\.bla zeigt auf blafile). Nun wird zum geraden ermittelten Schlüssel gesprungen und dieser untersucht (bei einem 'open'-Befehl HKCL\blafile\Shell\open\command) und das dort angegebene Programm ("C:\Programme\Wuppdi\bla.exe" "%1") mit dem übergebenen Dateinamen als Parameter gestartet. Daher kann es auch sein, dass je nach Befehl (open, print etc.) unterschiedliche Programme aufgerufen werden, da in den entsprechenden Schlüsseln eben unterschiedliche Programme eingetragen sind. |
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Trotzdem ist das Quatsch. Denn die Textdatei liest du dann wahrscheinlich wieder in dein Programm ein, oder?
Statt dafür die cmd.exe zu nehmen kannst du die Ausgabe auch direkt auslesen wie bereits inkl. fertigem Code verlinkt. Dann funktioniert der Code auch ohne Schreibrechte auf eine Ausgabedatei... |
AW: ShellExecute: Probleme bei der Übergabe von zusätzlichen Programmparametern
Kann es nicht sein, dass er gute Gründe dafür hat, die Ausgabe in eine Datei umzuleiten? Ich finde es reichlich vermessen, das pauschal als "Quatsch" abzutun, ohne die genaue Intention dahinter zu kennen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz