所以我有一個進程(java命令行應用程序)隱藏着輸出和輸入被重定向。我可以很容易地閱讀輸出結果,並且可以工作,但是當我發送命令時,它不起作用。standardinput沒有被重定向C#
我認爲,我已確定,該輸入沒有被重定向,因爲:
(A)當我發送WriteLine(//command here); Flush
沒有命令是由程序
(B)當我取消隱藏cmd窗口確認(StartInfo.CreateNoWindow = false;
)我可以輸入命令並運行它們(在cmd窗口),即使StandardInput被重定向(StartInfo.RedirectStandardInput = true;
)
下面是代碼:
namespace bukkit
{
public partial class Form1 : Form
{
private static StringBuilder _txt = new StringBuilder();
private static bool _scrolled = false;
Process mncrft = new Process();
public Form1()
{
InitializeComponent();
mncrft.StartInfo.WorkingDirectory = Path.GetTempPath();
mncrft.StartInfo.Arguments = "-Xmx512M -Xms512M -jar C:\\mncrft\\mncrft.jar";
mncrft.StartInfo.FileName = "java.exe";
mncrft.StartInfo.UseShellExecute = false;
mncrft.StartInfo.RedirectStandardOutput = true;
mncrft.StartInfo.RedirectStandardError = true;
mncrft.StartInfo.RedirectStandardInput = true;
mncrft.StartInfo.CreateNoWindow = false;
mncrft.ErrorDataReceived += build_ErrorDataReceived;
//mncrft.OutputDataReceived += build_ErrorDataReceived;
mncrft.EnableRaisingEvents = true;
//mncrft.StandardInput.NewLine = "\r\n";
mncrft.Start();
mncrft.BeginOutputReadLine();
mncrft.BeginErrorReadLine();
}
private void Form1_Load(object sender, EventArgs e)
{
_txt.AppendLine("Starting Minecraft...");
}
private void Form1_Close(object sender, EventArgs e)
{
mncrft.Close();
}
static void build_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
string msg = e.Data;
if (msg != null && msg.Length > 0)
{
_txt.AppendLine(msg);
_scrolled = false;
}
}
private void mainTimer_Tick(object sender, EventArgs e)
{
if (_txt.Length > 0)
{
txtOutput.Text = _txt.ToString();
// scroll down
if (_scrolled == false)
{
txtOutput.SelectionStart = txtOutput.Text.Length;
txtOutput.ScrollToCaret();
_scrolled = true;
}
}
}
private void Execute_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
mncrft.StandardInput.WriteLine(textBox1.Text);
mncrft.StandardInput.Flush();
}
}
}
}
如何重定向輸入以便發送命令?
感謝, 亞當
P.S:如果這是混亂的,只是把一個評論下來,我會很樂意澄清。
回答
感謝Tim, 替換以下行:
mncrft.StartInfo.FileName = "java.exe";
mncrft.StartInfo.Arguments = "-Xmx512M -Xms512M -jar C:\\mncrft\\mncrft.jar";
有:
mncrft.StartInfo.FileName = "java";
mncrft.StartInfo.Arguments = "-Xmx512M -Xms512M -jar C:\\mncrft\\bukkit.jar -nojline";
這不是becuse在WinForm,而是因爲Bukkit本身。不幸的是,我有同樣的問題,不知道如何解決它。 D:我注意到的一件事是,當我嘗試運行它時,它會劫持控制檯。 – 2011-05-09 04:19:22
如果我想出任何東西,我會在這裏發佈。難道缺口會知道嗎? – 2011-05-09 11:09:31
順便說一下,它不是一個好主意,只是說'java',因爲你可能會啓動一個64位電腦上的java 32位 – EaterOfCode 2012-08-12 07:04:50