1

我目前正在开发一个可以处理 Minecraft 服务器的程序。我正在运行我的批处理女巫记录服务器,我现在希望批处理(在我的代码中称为批处理)登录我的名为 lg_log 的列表框。

如果有可能,我该怎么做?

我在 Visual Studio 中编程 - 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 回答