gpt4 book ai didi

c# - `Process` 不以进程参数中的特殊字符开头

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:54 26 4
gpt4 key购买 nike

我可以运行 FFmpeg.exe -i test.flv -f flv - | ffplay -i - 在 cmd 中,但是当“|”时我无法在 c# 代码中运行它正在争论中。

此代码有效:

  Process process = new Process();
process process .StartInfo.FileName = "FFmpeg.exe";
process process .StartInfo.Arguments =" -i test.flv "
process .Start();

但是这段代码不起作用:

  Process process = new Process();
process process .StartInfo.FileName = "FFmpeg.exe";
process process .StartInfo.Arguments =" -i test.flv -f flv - | ffplay -i -"
process .Start();

我试过这段代码但没有效果:

   process process .StartInfo.Arguments =" -i test.flv -f flv - \| ffplay -i -"

process process .StartInfo.Arguments =" -i test.flv -f flv - \\| ffplay -i -"

process process .StartInfo.Arguments =@" -i test.flv -f flv - | ffplay -i -"

process process .StartInfo.Arguments ="\" -i test.flv -f flv - \| ffplay -i -\""

请告诉我如何运行 FFmpeg.exe -i test.flv -f flv - | ffplay -i - 在 C# 代码中。

最佳答案

将一个命令的输出通过管道传输到另一个命令是您在其中执行这些命令的 shell 的一项功能。在 .NET 中,使用 Process 类需要使用 shell(通常是 cmd.exe)来达到相同的效果。

// usually expands to `C:\Windows\System32\cmd.exe`
process.StartInfo.FileName = Environment.ExpandEnvironmentVariables("%COMSPEC%");
// Build a command line passed to CMD.EXE
process.StartInfo.Arguments = "/C FFmpeg.exe -i test.flv -f flv - | ffplay -i -"

此外,根据您的用例,您通常希望等待该过程完成:

process.WaitForExit();

并可能评估退出代码

if (process.ExitCode != 0) // Convention only! Usually, an exit of 0 means error. YMMV.

最后,请注意,对于管道,此处返回的退出代码是最后一条命令的退出代码(在您的情况下为 ffplay)。

关于c# - `Process` 不以进程参数中的特殊字符开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32689708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com