Ausgeführt werden die Kommandozeilen von c# mit den Parametern?
Es ist möglich, ausführen Kommandozeile in c# durch die Verwendung von so etwas wie dieses :
process = new Process();
process.StartInfo.FileName = command;
process.Start();
Ist das problem wenn der Befehl ein string-Parameter enthält, zum Beispiel:
C:\My Dir\MyFile.exe MyParam1 MyParam2
Funktioniert das nicht und ich sehe nicht, wie das extrahieren der Parameter aus diesem string ein und setzen Sie es auf die process.Arguments
Eigenschaft? Der Pfad und der Dateiname könnte etwas anderes sein, die Datei nicht zu Ende mit exe
.
Wie kann ich dieses Problem lösen?
- Die Frage ist also, wie kann ich das aufteilen einer Befehlszeile in eine
FileName
undArguments
. - Klingt wie Sie wollen, einen regulären Ausdruck zu finden, der break-Punkt. Streng genommen, wenn der Dateiname ein Leerzeichen enthält, sollte in Anführungszeichen gesetzt werden. Das würde die u helfen, eine Menge. Ist dies der Fall in deinem Beispiel ist der Dateiname
C:\\My
oderC:\\My Dir\MyFile.exe
? Übrigens, ist, dassM
entkommen? - Tun, die Datei endet mit einem Punkt und jede Erweiterung? zB .com .exe...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich das richtig verstanden, das ich verwenden würde:
Wenn Sie eine vollständige Zeichenfolge, die Sie brauchen, um zu analysieren, würde ich die anderen Methoden setzen sich aus den Aussagen der anderen hier. Wenn Sie möchten, fügen Sie Parameter hinzu, um den Prozess, verwenden Sie die oben genannten.
Könnte dies die schlechteste Lösung, aber es könnte ein sicherer one:
Behauptung: Wenn ein Dateiname ein Leerzeichen enthält, muss er gewickelt werden, in Anführungszeichen.
Dies ist sicherlich der Fall bei Windows. Sonst werden die Regeln viel stärker kontextabhängig.
Haben Sie einen Blick auf regex-matching-Räume-aber-nicht-in-Saiten, ich vermute, Sie können, benutzen Sie den regex,
mit
Regex.Split()
konvertieren Sie den Befehl Zeile in ein array. Der erste Teil sollte mit dem Namen.