C#启动进程时如何传递参数数据

3

我正在尝试将文件中的数据作为C#命令行参数传递,并遇到了问题。

ProcessStartInfo startInfo1 = new ProcessStartInfo();
startInfo1.FileName = @"myexe.exe";
startInfo1.UseShellExecute = false;
startInfo1.RedirectStandardOutput = true;
startInfo1.WindowStyle = ProcessWindowStyle.Hidden;
startInfo1.WorkingDirectory = @"C:\myfolder\";
startInfo1.Arguments = "-cmd1 x -cmd2 y  < c:\\yesfile.txt";

问题出在 < c:\yesfile.txt ...

当我进行调试并抓取 .Arguments 并从命令行执行时,一切正常。但是在代码中运行时,出现了问题。

Invalid command line parameters: <

搜索了一下,我找不到从代码中传递数据的方法。我调用的exe文件不会将“y”作为命令行参数输入,所以我必须从文件中传递它以便像这样自动运行。
更新:如何获取标准输入并传入y(基于答案)- 确保你也设置了RedirectStandardInput = true;
       StreamWriter inputWriter = myProcess.StandardInput;
                    inputWriter.Write("y");
                    inputWriter.Flush();
                    inputWriter.Close();

2
应该是 startInfo1.UseShellExecute = true; 吧? <, >, | 由 shell (cmd) 处理。 - khachik
尝试过了 - 进程对象必须将UseShellExecute属性设置为false才能重定向IO流。我还关闭了输入/输出重定向并尝试了一下,但似乎也不起作用。 - ScaleOvenStove
1个回答

3
这是因为重定向符号“<”、“>”等由 shell 处理,而不是 Windows 处理——你不能从 Process.Start 中使用它们。 相反,您可以使用包含“y”的流填充您的 Process.StandardInput 并使用标志startInfo1.RedirectStandardInput = true;

你有这方面的例子吗? - ScaleOvenStove

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接