将命令行参数从C#传递到外部exe

将命令行参数从C#传递到外部exe,c#,command-line,parameters,C#,Command Line,Parameters,我有一个已经解决的类似问题。但我不明白这个问题是如何解决的。我有一个程序,可以获取参数并定义输入和输出文件。从推荐行运行此命令,一切正常: D:\Tools\siftDemoV4>siftWin32.exe -display < D:\tmp\SrcPgm\image000.pbm > result.pbm D:\Tools\siftDemoV4>siftWin32.exe-displayresult.pbm 但通过System.Diagnostics.Process运行不

我有一个已经解决的类似问题。但我不明白这个问题是如何解决的。我有一个程序,可以获取参数并定义输入和输出文件。从推荐行运行此命令,一切正常:

D:\Tools\siftDemoV4>siftWin32.exe -display < D:\tmp\SrcPgm\image000.pbm > result.pbm
D:\Tools\siftDemoV4>siftWin32.exe-displayresult.pbm
但通过System.Diagnostics.Process运行不起作用。我得到错误“无效的命令行参数:{1}”,configuration.Source, 配置。目的地), FileName=configuration.PathToExternalSift, RedirectStandardError=true, 重定向标准输入=真, 重定向标准输出=真, UseShellExecute=false, CreateNoWindow=true, ErrorDialog=false, } }; process.EnableRaisingEvents=true; process.Exited+=OnProcessExited; process.OutputDataReceived+=新的DataReceiveDevenHandler(process\u OutputDataReceived); process.ErrorDataReceived+=新的DataReceivedEventHandler(process\u ErrorDataReceived); process.Start(); process.BeginOutputReadLine(); process.BeginErrorReadLine(); 在调用process.Start()之后,我已经尝试写入process.StandardInput,但在使用调试器时,外部程序有时已经完成(HasExited==true)

有人能解释一下我如何将这个特殊的“”参数传递给程序吗

致以最良好的问候


顺便说一句,我多次检查了路径,它们是正确的。

您需要的唯一参数是
-display
其他参数不是程序的参数,应该由您使用
重定向标准输入
重定向标准输出

例如

  • 读取文件
    D:\tmp\SrcPgm\image000.pbm
  • 写入流程的
    StandardInput
  • 从流程的
    StandardOutput
    中读取
  • 写入
    result.pbm

如果您已经阅读了另一个线程,为什么不也阅读该线程?提示:这是第一段。上一篇解释了为什么
不起作用。在您的
可能重复的Ok之后,我尝试了这个,但现在我得到了另一个错误:错误:输入不是标准的原始PGM文件。但我所做的每件事都是process.StandardInput.Write(File.ReadAllBytes(sourceFile))和Flush()+Close()。我不会更改文件内容的任何内容。如果解决了此问题。通过将文件读入字符串而不是字节[]来解决问题。有人知道为什么吗?多亏了L.B。
var process = new Process()
{
   StartInfo =
   {
     Arguments = string.Format(@"-display < {0} > {1}", configuration.Source,
       configuration.Destination),
     FileName = configuration.PathToExternalSift,
     RedirectStandardError = true,
     RedirectStandardInput = true,
     RedirectStandardOutput = true,
     UseShellExecute = false,
     CreateNoWindow = true,
     ErrorDialog = false,
   }
};

process.EnableRaisingEvents = true;
process.Exited += OnProcessExited;
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();