C# Process.InputStream: strings an einen Prozess senden?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Dieses Beispiel macht genau was du willst.

http://msdn.microsoft.com/de-de/library/system.diagnostics.processstartinfo.redirectstandardinput

Ein kurzer Test meinerseits hat damit auch prima funktioniert.

Sollte dir das auch nicht helfen vermute ich den Fehler eher bei der Konsolenanwendung. Ansonsten könntest du ja auch mal die Konsolenanwendung nennen und etwas genauer was du vor hast.

  • FFmpeg.exe

  • java.exe (für craftbukkit.jar)

Beide liefern wunderbare Ausgaben, aber akzeptieren die nötigen Eingaben nicht...

0
@ProfLauchi

Da mich das Ganze auch mal interessiert hat, habe ich mal ein paar Tests gemacht. Leider kann es in dem Bereich offensichtlich zu diversen Problemen kommen.

Auf Stack Overflow habe ich folgendes gefunden:

http://stackoverflow.com/questions/6655613/why-does-standardoutput-read-block-when-startinfo-redirectstandardinput-is-set

Hier geht es zwar eigentlich darum, dass StandardOutput.Read() blockiert aber interessant ist die Antwort des Fragestellers selbst (weiter unten). Er hat für die Lösung seines Problems letztlich die Win API direkt benutzt und damit sowohl Ein- als auch Ausgabe des Programms behandelt.

Dabei wird selbstredend recht viel 'unsafe' und 'Marshal' verwendet ;), aber vielleicht hilft dir das.

0
@bangabobo

Vielen Dank =D

Dass C# es hinbekommt, dass ein die Ausgabe eines Prozesses die Eingaben in denselben behindern könnte, ist mir noch garnicht in den Sinn gekommen :)

0

http://msdn.microsoft.com/de-de/library/gg145045

Ich weiß nicht, ob du diese Seite schon kennst, aber wenn nicht, solltest du sie dir unbedingt mal ansehen. Denn sie ist, wenn du mit .NET und C# programmierst, wirklich die ultimative Referenz, da du dort für wahrscheinlich alle Methoden, Klassen etc. des Frameworks ausführliche Erklärungen (oft auch in Deutsch) findest, die meisten sogar mit Beispielcode (meist in C#, VB und C++).

Ja, auf der Seite war ich schon. Ich hab' auch exakt den Beispielcode kopiert, was auch nicht getan hat... daher auch meine Frage hier ;)

0

[Minecraft/Spigot/Java] Wie kann ich aus einem GameProfile Skins abspeichern?

Hallo,

ich würde gerne wissen wie ich aus dem GameProfile die für den Skin nötigen Daten bekomme, um diese abzuspeichern.

Es soll zu einem Cachingsystem dienen, damit auch beispielsweise die Köpfe von Spielern angezeigt werden können, die nicht online sind, ohne zu viele Anfragen an die Mojang Server zu stellen.

Folgenden Code nutze ich um das GameProfile von einem Spieler zu erhalten und diesem seinen eigene Kopf über die Informationen des GameProfiles zu geben. Dabei wende ich ein Object aus dem Reflection Bereich an (Field).

    public static ItemStack getFriendTool(Player p){
    
    SkullMeta freundeMeta = (SkullMeta) Bukkit.getItemFactory().getItemMeta(Material.SKULL_ITEM);
    GameProfile gp = ((CraftPlayer) p).getProfile();
    
    try {
        Field field = skullMetaClass.getDeclaredField("profile");
        field.setAccessible(true);
        try {
            field.set(freundeMeta, gp);
        } catch (IllegalArgumentException | IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        field.setAccessible(!field.isAccessible());
    } catch (NoSuchFieldException | SecurityException e) {
        e.printStackTrace();
    }
    freundeMeta.setDisplayName("§eFreunde");
    ArrayList<String> freundeLore = new ArrayList<String>();
    freundeLore.add("Mit einem Rechtsklick öffnest Du die Freunde Übersicht,");
    freundeMeta.setLore(freundeLore);
    ItemStack freundeTool = new ItemStack(Material.SKULL_ITEM,1, (byte)3);
    freundeTool.setItemMeta(freundeMeta);
    return freundeTool;
}

Dieser Code funktioniert bereits nur wäre es eben gut, wenn ich die nötigen Informationen aus dem GameProfile abspeichern könnte und diese wiederverwenden könnte.

Meiner Überlegung nach, müsste ich diese aus einem Property Object bekommen, leider hat aber eine Recherche nichts gebracht.

Vielen Dank für jegliche Hilfe.

...zur Frage

Wer kann mir sagen woran das liegt, es geht um Java (Textfield)?

Hey, ich habe ein Problem mit einem JTextfield. Es wird mit erst angezeigt nachdem ich einmal mit der Maus in das Textfeld geklickt habe. Damit meine ich, das es garnicht zu sehen ist solange ich nicht auf sie Stelle geklickt habe an der das Feld ist. Mein Code:

    setVisible(true);
    setSize(500, 500);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    setLayout(null);
    eingabe = new JTextField();
    eingabe.setBounds(300, 100, 150, 50);
    add(eingabe);
...zur Frage

Drucken in Vb

Hallo Männer,

ich habe folgendes Problem mit Visual Studio...

ich möchte nachdem ich was ausgewertet habe eine Datei drucken ohne das sie geöffnet wird.

wie realisiere ich das am besten??

Habe im netz folgenden Code gefunden, aber damit komme ich nicht klar

Dim printProcess = New Process() printProcess.StartInfo.FileName = fullPath printProcess.StartInfo.UseShellExecute = True printProcess.StartInfo.Verb = "print" printProcess.Start()

...zur Frage

do while + try catch Abfrage in Java zur Eingabenkontrolle erzeugt unendlichen Loop

Also ich will in Java eine Methode schreiben die die Eingabe kontrolliert und dann bei korrekter Eingabe den eingegeben Wert zurückgibt. Mein Quellcode sieht so aus

public static int liesInt(String Ausgabe)
{       
    Scanner eingabe = new Scanner (System.in);
    int eingegeben = 0;
    System.out.println(Ausgabe);
    boolean error = true;
    
    do
    {
        try
        {
            eingegeben = eingabe.nextInt();
            error = false;
        }
        catch(InputMismatchException e)
        {
            System.out.println("Bitte geben Sie nur ganze Zahlen ein!");
            error = true;
        }   
    } while (error == true);
            
    return eingegeben;
}

mein problem ist dass er nach dem der catch greift und den error wert auf true gesetzt ist er nicht wieder zum try springt und nicht erneut nach einer eingabe fragt...

wo ist mein fehler eigentlich müsste er nach dem catch wieder oben anfangen beim try aber das passiert nicht

...zur Frage

Programmieren (Java) verschiedene Begriffe erklärung?

Was sind:

-Tokens

-Bezeichner

-Ausdrücke

-Ausdrucksanweisungen

Wäre echt nett, wenn mir einer diese 4 begriffe verständlich erklärt LG

...zur Frage

C# - Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird?

Hallo, ich habe ein Problem mit meiner programmierten Anwendung. Immer wenn ich auf den Erstellen-Button klicke kommt in einer textBox die Meldung:

Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.

Code:

private void buttonErstellen_Click(object sender, EventArgs e)
		{
			OpenFileDialog ofd = new OpenFileDialog();
			ofd.Filter = "XML|*.xml";
			if (ofd.ShowDialog() == DialogResult.OK)
			{
				try
				{
					textBoxPfad.Text = Path.GetDirectoryName(ofd.FileName);
					DeserializeXml(ofd.FileName);
				}
				catch (Exception exception)
				{
					textBoxStatus.Text = exception.Message;
				}
			}
		}
    public void DeserializeXml(string fileName)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(PersonenKonfiguration));
        XmlReader xmlFileReader;
        
        try
        {
            Person personen = new Person { Name = "Mustermann", Vorname = "Max", Wohnort = "Musterstadt" };
            
            xmlFileReader = XmlReader.Create(fileName);
            StreamWriter writer = new StreamWriter(fileName);
            serializer.Deserialize(xmlFileReader);
            writer.Write(personen);
            textBoxStatus.Text = "Validierung abgeschlossen.";
        }
        catch (Exception ex)
        {
            textBoxStatus.Text = ex.Message;
        }
    }

...zur Frage

Was möchtest Du wissen?