2012-01-23 110 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