Einzelnen Beitrag anzeigen

CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#1

Problem mit ParamStr, Leerzeichen und UAC

  Alt 1. Apr 2013, 18:22
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?
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat