ich benutze TProcess um ein konsolenbasiertes RawCopy Programm auszuführen.
Ein einfacher Kommandezeilenbefehl sieht wie folgt aus:
Muster: Anwendung.exe Quelldatei Zielpfad
Code: Alles auswählen
C:\Portable\RawCopy64.exe "C:\Meine Daten\Eine Datei.png" "C:\Meine kopierten Daten"
Code: Alles auswählen
C:\Portable\RawCopy64.exe "C:\Daten für mich\Eine Datei.png" "C:\Kopierte Daten für mich"
Ich vermute mal, dass die genauso codiert übergeben werden, und dass das Problem darstellt.
Auszug aus dem TProcess Create:
Code: Alles auswählen
var Cmdline: PChar;
...
// Commandline ist vom Typ String
// und wird hier an Cmdline als PChar gesetzt
if (Commandline = EmptyStr) then Cmdline := nil
else Cmdline := PChar(Commandline);
...
// Der Prozess wird hier erstellt
// und verlangt ein PChar Parameter
// Beim Debuggen an dieser Stelle sehe ich, dass die Umlaute anders codiert sind.
HasHandle := CreateProcess(
Cmd, //only-command, e.g. C:\Portable\myapp.exe
Cmdline, //cmd-params, e.g. C:\Portable\myapp.exe -h
@vSecurityAttributes,
@vSecurityAttributes,
True,
NORMAL_PRIORITY_CLASS,
nil,
WDir, //work-dir
vStartupInfo,
vProcessInfo);
1. Eine Datei direkt über die Commandozeile kopiert
2. Beide Ordner umbenannt und die Umlaute entfernt
In beiden Fällen funktioniert das Kopieren der Dateien
Wie kann ich das korrigieren, dass ich ein anständig codiertes PChar an den Process und somit an die Kommandozeile übergeben kann?
Danke und Gruß
Antonio