2
在Java中,当我想启动一个进程,我可以告诉它的命令来运行:指定参数
String[] commands = {"Perl", "-e", "print \"hello world\""}
ProcessBuilder processBuild = new ProcessBuilder();
processBuild.command(commands);
在C#中,我有一个问题,因为我需要做同样的的事情,但我必须分别填写filename
和arguments
作为单独的字符串:
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回声你好”变成cmd /c "echo" "hello"
。我的意思是我想我可以制作一些if/elses,并试着对它做出明智的决定,但是必须有更好的方法?
所以我转向你们帮我一把。我如何在C#中启动一个以非cmd行方式指定其参数的进程?
这仍然需要知道如何创建一个有效的参数字符串(它可以被解析成参数列表)。没有办法只提供参数列表(Unix的'execv'或'execvp'),因此不需要相关引用的知识? – jamessan 2012-03-07 20:51:31