Java.exeファイルを対象とするプロセスを作成しました。プロセスはJava.jarサーバファイルを実行し、サーバがクラッシュするか、強制的に閉じるまで出力フィードバックを出力し続ける必要があります。すべて正常に動作します..サーバーが実行されて.. UseShellExecuteをTrueに設定すると、すべての出力を返す黒のCMDウィンドウが表示されます。しかし、私はそれをfalseに設定し、出力をリダイレクトするとき...ウィンドウは完全に空白です(サーバーはまだ実行中です)、OutputDataReceivedイベントはまったく発生しません(私は一度それを得たと思いますが、 argsが空であると思われるウィンドウを閉じた)と私が見る限り、StandardOutput.ReadToEnd()は何も返さない。なぜこのプロセスは出力フィードバックを返さないのですか?再び、このプロセスは完全に正常に動作してあるUseShellExecuteがtrueに設定されてC#:Java.exeを実行しているプロセスが完璧に動作していますが、ウィンドウが出力を返さないのはなぜですか?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace MWRemoteServer
{
public partial class ServerWindow : Form
{
private delegate void WriteOutputDelegate(string output);
private WriteOutputDelegate writeOutput;
public ServerWindow()
{
InitializeComponent();
logBox.BackColor = Color.White;
logBox.ForeColor = Color.Black;
writeOutput = new WriteOutputDelegate(write);
}
public void server_recievedOutputStream(object sender, DataReceivedEventArgs args)
{
MessageBox.Show("Called window output!");
if (args.Data != null)
{
BeginInvoke(writeOutput, new object[] { args.Data.ToString() });
}
}
private void write(string output)
{
logBox.AppendText(output + Environment.NewLine);
}
}
}
:出力データとDataReceivedEventArgsを受けるべき
gameServerProcess = new Process();
gameServerProcess.StartInfo.UseShellExecute = false;
gameServerProcess.StartInfo.RedirectStandardOutput = true;
gameServerProcess.StartInfo.RedirectStandardInput = true;
gameServerProcess.EnableRaisingEvents = true;
gameServerProcess.Exited += new EventHandler(gameServer_WindowExit);
window = new ServerWindow();
gameServerProcess.OutputDataReceived += new DataReceivedEventHandler(window.server_recievedOutputStream);
window.Show();
gameServerProcess.StartInfo.FileName = @"D:\Program Files\Java\jdk1.6.0_12\bin\java.exe";
gameServerProcess.StartInfo.WorkingDirectory = @"D:\Users\Zack\Desktop\ServerFiles\gameserver";
gameServerProcess.StartInfo.Arguments = @"-Xmx1024m -cp ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer";
gameServerProcess.Start();
gameServerProcess.BeginOutputReadLine();
そして、私の「窓」フォームクラスコード:ここに私のコードです私はそれが私がつかむ必要があるすべての情報を提供しているのを見ることができます。しかし、私はそれを空白にして、何も出力データをつかむことはできません!
は
OMFGそれはstderrに書いていたようですか?理由のためにそれが呼ばれた「標準的な」「アウトプット」のためにそれをするのはなぜでしょうか?ありがとうございました ! – OneShot