2011-07-12 108 views
1

可以說,我有一個.bat文件,其中文字樣 回聲HELLO 暫停通過Cmd.exe C#獲取字符串

輸出「HELLO」。 沒有別的

如果我從C#開始進程,也許我想在進程中閒置,並把它輸出到一個字符串的一切? 就像我掃描過程。

我得到的代碼是這樣做的,但是像0秒之後,當進程啓動時,它需要輸出什麼,但只有第一個。 如果我有一個100行的bat文件,那麼它只需要1個也許。

總而言之,一旦bat文件輸出新的東西,我想在我的C#應用​​程序中得到它。

請幫

示例代碼:

Directory.SetCurrentDirectory(@"C:\Users\WS\Desktop\Modded\"); 
Process p = new Process(); 
p.StartInfo.FileName = @"C:\Users\WS\Desktop\Modded\Launcher.bat"; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.RedirectStandardOutput = true; 
p.Start(); 
txtLog.Text = 
p.StandardOutput.ReadToEnd(); 
p.Close(); 

~~ redpois0n

+3

向我們顯示您當前的代碼。 (如何準備示例代碼:http://tinyurl.com/so-hints) – Heinzi

+0

Ill add now .... Directory.SetCurrentDirectory(@「C:\ Users \ WS \ Desktop \ Modded \」); 進程p = new Process(); p.StartInfo.FileName = @「C:\ Users \ WS \ Desktop \ Modded \ Launcher.bat」; p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true; p.StartInfo.RedirectStandardOutput = true; p.Start(); txtLog.Text = p.StandardOutput.ReadToEnd(); p.Close(); – redpois0n

+0

@ user841016:不要把它放在評論裏,它隱藏在那裏,不可讀 - 放在*問題*中。 –

回答

0

如果我理解你的要求正確,它應該返回一個字符串數組,它聽起來像你只檢索/顯示數組的第一個元素。如果命令行有很多參數,則需要循環遍歷數組,直到數組的大小。

此外,txtLog可能需要更改爲: txtLog.Text + = p.StandardOutput.ReadToEnd(); 如果您追加到日誌。

+0

是的,但它是一個Minecraft服務器,可以隨時「生成」新的字符串。像BLLALBLALB加入了遊戲。 如果我不把p.Close();它不會返回任何東西。 和p.StandardOutPut.ReadToend()中的循環也不會工作,我想要一個實時流 – redpois0n

+0

你可以循環p.StandardOutPut.ReadLine();而不是「readToend();」 –

+0

是的,但我必須調用p.Stop();得到一些東西 – redpois0n