2011-05-24 22 views
3

試圖從一個文件中的數據通過在C#中的CMD行參數和運行到問題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並從cmd行執行,工作正常。從代碼運行,我得到

Invalid command line parameters: < 

搜索周圍,我無法找到從代碼中執行此操作(傳入數據)的方式。我正在調用的exe不會將「y」作爲cmd行arg,因此我必須從文件中將它傳入,以便像這樣自動運行它。

更新:如何獲得STD輸入,並通過在AY(基於答案) - 確保你RedirectStandardInput = true;以及

 StreamWriter inputWriter = myProcess.StandardInput; 
        inputWriter.Write("y"); 
        inputWriter.Flush(); 
        inputWriter.Close(); 
+2

不應該'startInfo1.UseShellExecute = true的小溪種子的Process.StandardInput? '<, >,|'由shell(cmd)處理。 – khachik 2011-05-24 19:41:57

+0

試過 - Process對象必須將UseShellExecute屬性設置爲false,以便 重定向IO流。我也轉向重定向輸入/輸出,並嘗試,它似乎也沒有工作。 – ScaleOvenStove 2011-05-24 19:55:58

回答

3

這是因爲重定向<,>等由shell而不是由Windows處理 - 您不能在Process.Start中使用它們。 `;

你可以代替用含 'Y' 和標誌startInfo1.RedirectStandardInput = true;

+0

你有這樣的例子嗎? – ScaleOvenStove 2011-05-24 19:52:03

-1

或許它應該是 '>'

startInfo1.Arguments = "-cmd1 x -cmd2 y > c:\\yesfile.txt"; 
+0

這是不是因爲我在我的問題中說,它從CMD線罰款。 – ScaleOvenStove 2011-05-24 19:42:47

+1

不,'''shell命令將當前命令的標準輸出重定向到一個文件。 @ScaleOvenStove詢問如何讓'Process'重定向標準輸入。在命令行中,'<'是正確的。 – 2011-05-24 19:44:08

+0

他希望文本文件作爲*輸入*到程序中,而不是輸出。 – Amy 2011-05-24 20:30:56