1

私は現在、Minecraft サーバーを処理できるプログラムに取り組んでいます。バッチ ウィッチ ログをサーバーに実行していますが、バッチ (コードではバッチと呼ばれます) が lg_log というリスト ボックスにログインするようにします。

可能であれば、どうすればそれを行うことができますか?

私はビジュアルスタジオでプログラミングしています-C#のWindowsフォーム。

編集:これは私のコードです:

Process batch = new Process();

string PathtoRunFile = @"\Servers\Base\start_server.bat";
string current_directory = Directory.GetCurrentDirectory();
string server_base = @"\Servers\Base";
string working_directory = current_directory + server_base;

batch.StartInfo.FileName = current_directory + PathtoRunFile;
batch.StartInfo.Arguments = "";
batch.StartInfo.WorkingDirectory = working_directory;

batch.StartInfo.UseShellExecute = true;
batch.Start();
4

1 に答える 1

1

Process.StartInfoようなプロパティが含まれていますRedirectStandardOutput。このフラグを に設定trueすると、イベント ハンドラを に追加してbatch.StartInfo.OutputDataReceived、任意のイベントをリッスンできます。ややそのように:

編集:エラー メッセージを受け取るために、ErrorOutput のリダイレクトを有効にすることもできます。

編集:要求に応じて、完全に機能する例を次に示します。test.batが存在することを確認してください。

using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;

public class Program {
    public static void Main() {
        var form = new Form {ClientSize = new Size(400, 300)};
        var button = new Button {Location = new Point(0, 0), Text = "Start", Size = new Size(400, 22)};
        var listBox = new ListBox {Location = new Point(0, 22), Size = new Size(400, 278)};
        form.Controls.AddRange(new Control[] {button, listBox});

        button.Click += (sender, eventArgs) => {
            var info = new ProcessStartInfo("test.bat") {UseShellExecute = false, RedirectStandardOutput = true};
            var proc = new Process {StartInfo = info, EnableRaisingEvents = true};
            proc.OutputDataReceived += (obj, args) => {
                if (args.Data != null) {
                    listBox.Items.Add(args.Data);
                }
            };
            proc.Start();
            proc.BeginOutputReadLine();
        };

        form.ShowDialog();
    }
}
于 2011-02-18T10:13:02.177 に答える