在C#Process中指定参数

时间:2012-03-05 20:17:01

标签: c# process

在Java中,当我想要启动一个进程时,我可以告诉它要运行的命令:

String[] commands = {"Perl", "-e", "print \"hello world\""}
ProcessBuilder processBuild = new ProcessBuilder();
processBuild.command(commands);

在C#中,我遇到了问题,因为我需要做同样的事情,但我必须将filenamearguments分别填写为单独的字符串:

processBuild.FileName = commands[0];
for (int x = 1; x < commands.Length; x++)
{
    processBuild.Arguments += " " + commands[x];

}

现在我不知道用户将尝试调用什么,因此我无法根据目标程序进行定制。我上面的解决方案的问题是该进程尝试运行perl -e print "hello world"。为什么它迫使我像命令行一样对待它?

当然我不能做if !start with [-/] { Surround with quotes }这样的事情,因为那时像“cmd / c echo hello”这样的东西会变成cmd /c "echo" "hello"。我的意思是,我想我可以制作一堆if / elses并尝试对它有所了解,但必须有更好的方法吗?

所以我转向你们帮助我。如何在C#中启动一个以非cmd行方式指定其参数的进程?

1 个答案:

答案 0 :(得分:1)

Process类使用了引擎盖下的CreateProcess API,它是可用于启动进程的最低级API之一。这个API将可执行文件与参数分开,因为它会像你一样区分它们。

两种解决方案:

  • 启动cmd.exe作为进程并发送&#34;命令&#34;作为论据 它。 cmd.exe将为您解析。
  • 尽管困难,但要自己解析。