TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
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!
Attachment:
bukkitcommanderform.zip
Reply
Answers (
1
)
Add controls to listview subitem
Process in C#