/ / Kommandozeile von c # mit Parametern ausführen? - c #, .net, Prozess

Kommandozeile von c # mit Parametern ausführen? - c #, .net, Prozess

Es ist möglich, die Befehlszeile in c # auszuführen, indem Sie Folgendes verwenden:

process = new Process();
process.StartInfo.FileName = command;
process.Start();

Das Problem ist, wenn die Befehlszeichenfolge Parameter enthält, zum Beispiel:

C:My DirMyFile.exe MyParam1 MyParam2

Das wird nicht funktionieren und ich sehe nicht, wie man die Parameter aus dieser Zeichenfolge extrahiert und auf die Zeichenfolge setzt process.Arguments Eigentum? Der Pfad und der Dateiname können etwas anderes sein, die Datei muss nicht mit enden exe.

Wie kann ich das lösen?

Antworten:

5 für die Antwort № 1

Wenn ich es richtig verstanden habe, würde ich verwenden:

string command = @"C:My DirMyFile.exe";
string args = "MyParam1 MyParam2";

Process process = new Process();
process.StartInfo.FileName = command;
process.StartInfo.Arguments = args;
process.Start();

Wenn Sie eine vollständige Zeichenfolge haben, die Sie analysieren müssen, würde ich die anderen von den anderen hier vorgestellten Methoden verwenden. Wenn Sie dem Prozess Parameter hinzufügen möchten, verwenden Sie die oben genannten.


4 für die Antwort № 2

Dies könnte die schlechteste Lösung sein, aber es könnte eine sicherere sein:

string cmd = "C:\My Dir\MyFile.exe MyParam1 MyParam2";
System.IO.FileInfo fi = null;
StringBuilder file = new StringBuilder();
// look up until you find an existing file
foreach ( char c in cmd )
{
file.Append( c );
fi = new System.IO.FileInfo( file.ToString() );
if ( fi.Exists ) break;
}

cmd = cmd.Remove( 0, file.Length );
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo( fi.Name, cmd );
System.Diagnostics.Process.Start( psi );

2 für die Antwort № 3

Assertion: Wenn ein Dateiname ein Leerzeichen enthält, muss es in doppelte Anführungszeichen gesetzt werden.

Dies ist sicherlich in Windows der Fall. Ansonsten werden die Regeln viel kontextueller.

Schau es dir an Regex-Matching-Leerzeichen, aber keine ZeichenfolgenIch vermute, Sie können die Regex verwenden,

" +(?=(?:[^"]*"[^"]*")*[^"]*$)"

verwenden Regex.Split() um Ihre Befehlszeile in ein Array zu konvertieren. Der erste Teil sollte Ihr Dateiname sein.