Ich habe hier ein verwirrendes Problem:
Beim Aufrufen meiner Anwendung mit einem von Anführungszeichen umschlossenen Parameter mit Leerzeichen, wird dieser per ParamStr unterschiedlich ausgewertet, je nachdem ob eine
UAC-Abfrage erfolgte oder nicht.
Ich breche das Problem mal herunter:
Die Anwendung erfordert Admin-Rechte, was per Manifest korrekt festgelegt ist. D.h. beim Aufrufen der exe erfolgt die
UAC-Abfrage:
"Möchten Sie zulassen, dass durch das folgende Programm von einem unbekannten Herausgeber ..."
Beim Starten der Anwendung führe ich testweise diesen Code aus:
Delphi-Quellcode:
ShowMessage(ParamStr(0)+#13#10+
ParamStr(1)+#13#10+
ParamStr(2)+#13#10+
ParamStr(3)+#13#10);
Fall 1:
Ich öffne eine Kommandozeile mit Adminrechten und führe diesen Befehl aus:
Code:
"C:\anwendung.exe" "test eins zwo"
Es erfolgt keine
UAC-Abfrage, weil die Kommandozeile ja bereits im Admin-Kontext läuft.
Ausgabe der Message-Box ist wie erwartet:
Code:
C:\anwendung.exe
test eins zwo
Fall 2:
Nun öffne ich eine Kommandozeile ohne Admin-Kontext und führe die den gleichen Befehl wie eben aus.
Es erfolgt wie erwartet eine
UAC-Abfrage, nach Bestätigung erscheint die Message-Box mit diesem Inhalt:
Code:
C:\anwendung.exe
test
eins
zwo
Wie kann es sein, dass im zweiten Fall die Anführungszeichen ignoriert werden und der Parameter an den Leerzeichen auseinandergenommen wird?
Was kann ich dagegen tun?