用引号包装参数并转义 \
和 "
是否足够?
我想使用 ProcessInfo.Arguments 将命令行参数 string[] args
传递给另一个进程。
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);
问题是,我得到的参数作为一个数组,必须合并到一个单一的字符串。可以精心设计一个论点来欺骗我的程序。
my.exe "C:\Documents and Settings\MyPath \" --kill-all-humans \" except fry"
根据 这个答案,我创建了以下函数来转义一个参数,但是我可能遗漏了一些内容。
private static string EscapeCommandLineArguments(string[] args)
{
string arguments = "";
foreach (string arg in args)
{
arguments += " \"" +
arg.Replace ("\\", "\\\\").Replace("\"", "\\\"") +
"\"";
}
return arguments;
}
这样做是否足够好,或者有什么框架函数可以实现这一点?