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 № 1Wenn 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.