Chrisor

Chrisor

  • NA
  • 1
  • 3.3k

[C#]RedirectStandardInput

Apr 5 2012 5:19 PM
Hallo Leute,
heute geht es um einen Minecraft-Server für den ich eine GUI schreiben möchte.
Folgendermassen sieht mein Code bisher aus:
[CODE]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.IO;
using System.Diagnostics;

namespace Bukkit_Commander_form
{
public partial class BukkitCommanderForm : Form
{
Process Server = new Process();
public BukkitCommanderForm()
{
InitializeComponent();
}
private void BukkitCommanderForm_Load(object sender, EventArgs e)
{
Server.StartInfo.FileName = "cmd.exe";
Server.StartInfo.CreateNoWindow = false;
Server.StartInfo.RedirectStandardOutput = true;
Server.StartInfo.RedirectStandardInput = true;
Server.StartInfo.RedirectStandardError = true;
Server.StartInfo.UseShellExecute = false;
Server.ErrorDataReceived += Server_Error;
Server.OutputDataReceived += Server_Output;
Server.Exited += Server_Exited;
Server.Start();
Server.BeginOutputReadLine();
Server.BeginErrorReadLine();
Server.StandardInput.WriteLine("@ECHO OFF");
Server.StandardInput.WriteLine("CD /D \"" + File.ReadAllText(Application.StartupPath + "\\ServerPath.txt") + "\"");
Server.StandardInput.WriteLine("\"" + File.ReadAllText(Application.StartupPath + "\\JREPath.txt") + "\" -Xmx1024M -Xms1024M -jar craftbukkit.jar");
}
private void Server_Error(object sender, DataReceivedEventArgs e)
{
ConsoleOutputBox.Invoke(new MethodInvoker(delegate { ConsoleOutputBox.Items.Add(e.Data.ToString()); }));
}
private void Server_Output(object sender, DataReceivedEventArgs e)
{
ConsoleOutputBox.Invoke(new MethodInvoker(delegate { ConsoleOutputBox.Items.Add(e.Data.ToString()); }));
}
private void Server_Exited(object sender, EventArgs e)
{
Server.CancelOutputRead();
Server.CancelErrorRead();
}
private void SendCommand_Click(object sender, EventArgs e)
{
Server.StandardInput.WriteLine(CommandBox.Text);
}
}
}
[/CODE]
Das klappt soweit auch ganz gut, aber in dem Moment in dem der Server via Batch-Command in die Konsole gezogen und ausgeführt wird:
[CODE]Server.StandardInput.WriteLine("\"" + File.ReadAllText(Application.StartupPath + "\\JREPath.txt") + "\" -Xmx1024M -Xms1024M -jar craftbukkit.jar");[/CODE]versagt die Server.StandardInput.WriteLine-Funktion, da sie anscheind nicht in der Lage ist den Befehl an den Server weiterzugeben.
Habe ich jetzt aber einen Befehl via Server.StandardInput.WriteLine-Funktion abgesetzt versucht die CMD diesen in sich selbst auszuführen sobald der Server von der Minecraft internen Konsole gestoppt wurde.
Das heisst es gibt kein output zu meinem Befehl und er wird nachgeschoben sobald die CMD aus dem externen Programm herausgesprungen ist OBWOHL auch das externe Programm ein Readline hatte in das die CMD den Befehl hätte setzen können.

Meint ihr es liegt daran dass es eine Java-Konsolen-Anwendung ist? würde es mit einer anderen Konsolen Anwendung funktionieren und ist es somit ein Fehler in der JVM?

vielen Dank schonmal für eure Antworten, dieses Problem quält mich.:mauer::mauer:

MfG chris!

Answers (1)