我有一个C#命令行应用程序,需要在Windows和Unix中的mono下运行。 在某个时候,我想启动一个子进程,并通过命令行传递一组任意参数。例如:
Usage: mycommandline [-args] -- [arbitrary program]
很遗憾,System.Diagnostics.ProcessStartInfo只接受一个字符串作为参数。这对于像下面这样的命令是有问题的:
./my_commandline myarg1 myarg2 -- grep "a b c" foo.txt
在这种情况下,argv看起来像是:
argv = {"my_commandline", "myarg1", "myarg2", "--", "grep", "a b c", "foo.txt"}
请注意,shell会删除“a b c”周围的引号,因此如果我简单地按顺序连接参数以创建ProcessStartInfo的arg字符串,则会得到以下结果:
args = "my_commandline myarg1 myarg2 -- grep a b c foo.txt"
这不是我想要的。
有没有一种简单的方法可以将argv传递给C#下启动的子进程,或者将任意argv转换为在Windows和Linux shell中合法的字符串?
任何帮助都将不胜感激。
CreateProcess
只接受一个字符串参数。Microsoft C 运行时库 (MSVCRT) 解析该字符串并将其作为 argv 变量提供,但程序不必使用 CRT 实现,并且 CRT 所做的解析不能保证返回启动进程所使用的相同令牌集合。 - Daniel Pryden