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

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

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

VB.NET Controls threadübergreifend ansprechen?

Hallo liebe Gutefrage.net-Community.

Bei meinem aktuellen VB.NET-Projekt (Server-Client-Chat) habe ich das Problem, dass ich aus der Sub, welche in einem separaten Thread ausgeführt wird, um eingehende Verbindungen abzufangen, der Listbox, die zur Anzeige für alle Aktionen des Server dient, beim Items hinzufügen die Fehlermeldung bekomme, dass die Listbox für einen anderen Thread erstellt worden ist.

Code des Extra-Threads:

Private Sub ListenToNewConnection()
  Item_add("Der Server läuft!")
  server = New TcpListener(ipendpoint)
  server.Start()

  While True
    client = server.AcceptTcpClient
    Dim c As New Connection connection...
    c.stream = client.GetStream
    c.streamr = New StreamReader(c.stream)
    c.streamw = New StreamWriter(c.stream)
    c.nick = c.streamr.ReadLine
    list.Add(c) ' und fügen sie der liste der clients hinzu.
    Item_add(c.nick & " has joined.")
    Dim t As New Threading.Thread(AddressOf ListenToConnection)
    t.Start(c)
  End While

Listbox-Aufruf:

Public Sub Item_add(item As String)
  lbConsole.Items.Add(item)
End Sub

Danke im Voraus für alle Antworten.

...zur Frage

"Dieser Ordner ist leer" wenn ich mein Handy am PC anschließe, was tun?

Hi,
Mein Handy (LG Nexus 5) hat die neueste Android Version (6.0 Marshmallow). Vor einigen Tagen (NACH dem Update) ging das Bilder übertragen zwischen PC und Handy noch aber seit heute spinnt's irgendwie. Wenn ich das Handy per USB Kabel anschließe (Es liegt weder am Kabel noch am Port) wird der Ordner angezeigt, jedoch steht da "Dieser Ordner ist leer". Auch versteckte Dinge werden angezeigt und mit dem USB Debugging hab ich's auch schon probiert. Nichts geht. Kann mir wer helfen? x.x Habe Windows 10. Danke!

...zur Frage

Hochzahlen in C-Programmierung

Wie lässt sich die dritte Potenz einer Zahl in der Programmiersprache C ausgeben? (jedoch ohne Verwendung der mathematischen Bibliothek)

Mein Source-Code(fehlerhaft):

**#include<stdio.h>

main() { double x

printf("Geben Sie bitte eine Zahl ein:"); scanf("%lf", &x);

y = x³;

printf("Dreierpotenz davon = %lf", y); } **

...zur Frage

Was möchtest Du wissen?