Kurzfassung:
Reicht es aus, das Argument in Anführungszeichen zu setzen und zu entkommen \
und "
?
Code-Version
Ich möchte die Befehlszeilenargumente string[] args
mit ProcessInfo.Arguments an einen anderen Prozess übergeben.
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = Application.ExecutablePath;
info.UseShellExecute = true;
info.Verb = "runas"; // Provides Run as Administrator
info.Arguments = EscapeCommandLineArguments(args);
Process.Start(info);
Das Problem ist, dass ich die Argumente als Array erhalte und sie zu einer einzigen Zeichenfolge zusammenführen muss. Es könnten Argumente formuliert werden, um mein Programm auszutricksen.
my.exe "C:\Documents and Settings\MyPath \" --kill-all-humans \" except fry"
Nach dieser Antwort habe ich die folgende Funktion erstellt, um einem einzelnen Argument zu entgehen, aber ich habe möglicherweise etwas übersehen.
private static string EscapeCommandLineArguments(string[] args)
{
string arguments = "";
foreach (string arg in args)
{
arguments += " \"" +
arg.Replace ("\\", "\\\\").Replace("\"", "\\\"") +
"\"";
}
return arguments;
}
Ist das gut genug oder gibt es dafür eine Rahmenfunktion?