在C#进程中指定参数

在C#进程中指定参数,c#,process,C#,Process,在Java中,当我想启动一个进程时,我可以告诉它要运行的命令: String[] commands = {"Perl", "-e", "print \"hello world\""} ProcessBuilder processBuild = new ProcessBuilder(); processBuild.command(commands); 在C#中,我遇到了一个问题,因为我需要做同样的事情,但我必须将文件名和参数分别作为单个字符串填写: processBuild.FileName =

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

String[] commands = {"Perl", "-e", "print \"hello world\""}
ProcessBuilder processBuild = new ProcessBuilder();
processBuild.command(commands);
在C#中,我遇到了一个问题,因为我需要做同样的事情,但我必须将
文件名
参数
分别作为单个字符串填写:

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

}
processBuild.FileName=命令[0];
for(int x=1;x
现在我不知道用户将尝试调用什么,所以我无法根据预期的程序对其进行调整。我上面的解决方案的问题是,进程试图运行
perl-e打印“helloworld”
。为什么它强迫我把它当作命令行

当然,我不能做像
if!从[-/]{round with quotes}
开始,因为像“cmd/c echo hello”这样的东西会变成
cmd/c“echo”“hello”
。我的意思是,我想我可以做一堆if/else,并试着聪明一点,但一定有更好的方法吗


所以我求助于你们来帮助我。我如何用C语言启动一个以非cmd行方式指定其参数的进程?

进程类在后台使用CreateProcess API,这是启动进程可用的最低级别API之一。此API将可执行文件与参数分开,因为它与您一样难以区分它们

两种解决方案:

  • 启动cmd.exe作为进程,并将“command”作为参数传递给 信息技术cmd.exe将为您进行分析
  • 尽管这很困难,但还是自己进行解析

这仍然需要知道如何创建有效的参数字符串(然后可以将其解析为参数列表)。没有办法一开始就提供参数列表(la Unix的
execv
execvp
),这样就不需要相关引用的知识了?