简短版本:
将参数用引号括起来并转义\
和"
是否足够?
代码版本:
我想使用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;
}
这样足够好吗,还是有任何框架函数可以实现这个功能?
"C:\Documents and Settings\MyPath \" --kill-all-humans \" except fry"
这样不是一个好主意,因为它会产生特权调用。 - hultqvistmy.exe "test\"test"
,arg[0] 将是test"test
。 - hultqvistabc"def
的字符串时,它就是abc"def
,现在为什么要对其进行转义呢?如果您正在添加像 "abc" + """" + "def" 这样的内容,这是有意义的。请注意,""""
转义了"
。