![]() |
Pfad richtig Escapen
Hallo,
ich möchte gerne per ShellExecute einen Datei mit parametern ausführen.
Delphi-Quellcode:
Fehlermeldung:
var
parameter: PWideChar; begin parameter := PWideChar('/K ^"%ProgramFiles(x86)%\PostgreSQL\9.1\bin\createuser^" -s -U postgres test'); ShellExecute(0, nil,'cmd.exe',parameter ,nil,SW_SHOW);
Code:
Was mach ich hier falsch? Wie Escape ich richtig?
Der Befehl ""C:\Program" ist entweder falsch geschrieben oder
konnte nicht gefunden werden. Gruß pustekuchen |
AW: Pfad richtig Escapen
Ich glaube nicht, dass Shellexecute die Umgebungsvariable auflösen kann.
|
AW: Pfad richtig Escapen
Soll es ja auch nicht. Das soll ja die cmd.exe dann machen, was sie ja anscheinend auch tut.
Auch wird das erste ^" richtig convertiert. Jedoch scheint das zweite " zu fehlen.. Zitat:
|
AW: Pfad richtig Escapen
Zitat:
Delphi-Quellcode:
erwähnt werden.
cmd /?
Aber so ganz durchgesehn hab ich da auch noch nicht. Zitat:
Delphi-Quellcode:
wurde zu
%ProgramFiles(x86)%\
Delphi-Quellcode:
. :wink:
C:\Program...
|
AW: Pfad richtig Escapen
In der Hilfe der cmd konnte ich zum escaping nichts finden. Lediglich zum /K parameter:
Code:
Und diese Bedingungen erfülle ich ja.
Wird /C oder /K angegeben, wird der Rest der Befehlszeile nach der Option als
Befehlszeile verarbeitet, wobei folgende Logik zur Verarbeitung des doppelten Anführungszeichens (") gilt: 1. Sind alle folgenden Bedingungen erfüllt, wird ein doppeltes Anführungszeichen auf der Befehlszeile beibehalten: - keine Option "/S" - genau zwei doppelte Anführungszeichen - keines der folgenden Zeichen zwischen den doppelten Anführungszeichen: &<>()@^| - es ist mindestens ein Leerzeichen zwischen den doppelten Anführungszeichen - die Zeichenfolge zwischen den doppelten Anführungszeichen ist der Name einer ausführbaren Datei 2. Ist dies nicht der Fall, wird bei einem doppelten Anführungszeichen als erstem Zeichen sowohl dieses, als auch das letzte doppelte Anführungszeichen entfernt (und der Rest der Befehlszeile bei- behalten). |
AW: Pfad richtig Escapen
Zitat:
|
AW: Pfad richtig Escapen
Dann müsste es ja mit dieser Zeile klappen:
Delphi-Quellcode:
Dort ist nun ein Leerzeichen vorhanden. Jedoch erscheint der gleiche Fehler.
parameter := PWideChar('/K ^"C:\Program Files (x86)\PostgreSQL\9.1\bin\createuser^" -s -U postgres test');
|
AW: Pfad richtig Escapen
Wozu dienen denn die "^"?
|
AW: Pfad richtig Escapen
|
AW: Pfad richtig Escapen
Da steht aber nichts davon, dass man Anführungszeichen escapen soll. Lass die ^ doch mal testhalber weg.
|
AW: Pfad richtig Escapen
Du sagst damit ja, daß dieses " ein "Zeichen" sein soll, so wie ein "A", aber das soll es ja nicht sein. :angle:
|
AW: Pfad richtig Escapen
Anführungszeichen werden in Batch gar nicht escaped sondern verdoppelt (oder vervierfacht). Escapen muss man nur Pipe (|), Umleitungen (< und >) sowie Befehlsgruppierungen (& und &&) und ggf. Klammern (welche ebenfalls der Befehlsgruppierung dienen).
Davon abgesehen frage ich mich aber noch, warum du die EXE nicht direkt ausführst. Das geht doch einfacher als der Umweg über CMD, oder nicht? Ergänzung: Zur Expandierung von Umgebungsvariablen nutze ich diese Funktion:
Delphi-Quellcode:
Die wird aber wahrscheinlich nicht mit WideStrings/Unicode funktionieren, schätze ich (ich weiß es nicht, weil ich bisher keine Notwendigkeit hatte, meine Programme darauf anzupassen und/oder zu testen).
function ExpandEnvStr(const sInput: string): string;
const MAXSIZE = 32768; // laut PSDK sind 32k das Maximum begin SetLength(Result, MAXSIZE); SetLength(Result, ExpandEnvironmentStrings(PChar(sInput), @Result[1], Length(Result))-1); //-1 um abschließendes #0 zu verwerfen end; MfG Dalai |
AW: Pfad richtig Escapen
Wer rechnet denn schon damit, dass man mit Shellexecute den Kommandoprozessor aufruft, um ein Programm auszuführen. Das ist ja von hinten durch die Brust ins Auge.
|
AW: Pfad richtig Escapen
Zitat:
Und dieser ![]() Zitat:
Mit diesem Pfad
Delphi-Quellcode:
parameter := PWideChar('/K "C:\Program Files (x86)\PostgreSQL\9.1\bin\createuser" -s -U postgres test');
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 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