2012-01-23 67 views
2

我遇到类似的问题,因为已经解决here。但我无法弄清楚,问题是如何解决的。我有一个程序,它可以获取输入和输出文件的参数。从Commend行运行,所有工作正常:将C#中的命令行参数传递给外部exe

D:\Tools\siftDemoV4>siftWin32.exe -display <D:\tmp\SrcPgm\image000.pbm> result.pbm 

但通过System.Diagnostics.Process运行,不起作用。我收到错误“无效的命令行参数:<”,并在此之后发生System.InvalidOperationException。

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(); 

我已经尝试过写process.StandardInput我打电话的Process.Start(后),但使用调试器时,外部程序是一段已经结束(HasExited ==真)。

任何人都可以解释我可以如何将这个特殊的“<”“>”参数传递给程序吗?

最好的问候!

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

+2

如果您已经阅读其他线程,你为什么不读[回答您的问题(http://stackoverflow.com/a/850856/880802)呢?提示:这是第一段。为什么'<' and '>'不起作用在最后一个解释。 – Nuffin

+0

您的'<'之后的所有内容不再是您的应用程序的参数。那些是命令行处理器的“开关”(可以这么说)。 – user7116

+0

[在使用System.Diagnostics.Process的命令行上的文件中管道]的可能重复(http://stackoverflow.com/questions/850802/piping-in-a--file-on-the-command-line-使用系统诊断进程) –

回答

2

你需要的唯一参数是-display其他人则没有参数的程序,应该由您使用RedirectStandardInputRedirectStandardOutput

  • 读取文件D:\tmp\SrcPgm\image000.pbm
  • StandardInput处理您的工艺
  • StandardOutput中读取您的工艺
  • result.pbm

Using command redirection operators

+0

好吧我试过这个,但现在我得到了一个错误:错误:输入不是一个标准的原始PGM文件。但是,我做的是process.StandardInput.Write(File.ReadAllBytes(sourceFile))和Flush()+ Close()。我不会更改文件上的任何内容。 – 0xBADF00D

+0

如果解决了这个问题[链接](http://stackoverflow.com/questions/2956274/how-to-pass-filename-to-standardinput-process-in-c)。通过将文件读入字符串而不是byte []来解决问题。有人知道为什么吗?感谢L.B. – 0xBADF00D