Konsolenanwendung aufrufen und Ausgabe auslesen
-
Ne, das geht nicht. Die Konsolenanwendung, die ich aufrufen muss, hab ich ja nichtgeschrieben.
-
Deswegen meinte ich ja, dass wenn du ein Windows Konsolenprogramm aufrufst, sowas wie "dir /s" (haste sicherlich nicht geschrieben
), die Ausgabe eben mit ">" in eine Textdatei umleitest, die du ja dann ganz leicht auslesen kannst.
Gruß
Markus Seidl
-
Ich weiss. Das hattest du aber erst nachträglich dazu geschrieben. Und so werde ich das warscheinlich auch verrübergehend lösen.
Aber wenn jemand ne Idee hat wie man das ordentlich über den Ausgabe-Stream auslesen kann, wäre ich sehr dankbar.
Btw: Das geht nicht nur unter der Windows-Komandozeile mit ">". Die Unix-Shell kann das genau so.
Gruß
Schrankwand
-
Habe ich auch nachträglich hinzugefügt, weil ich mir im ersten Moment nicht 100%ig sicher war, was du genau meinst. Ob das die Unix Shell auch so macht, weiß ich nicht, aber gut zu wissen dass sie es macht. Ich schreib zurzeit eh viel lieber Klassen die eher unabhängig vom Betriebssystem sind, bis auf ein paar Schnittstellen zum OS um vielleicht mal ne Datei zu öffnen.
Habe mich jetzt gerade nochmal ein bischen umgesehen und tatsächlich auf die schnelle noch was gefunden. Hier ein Link
Da wird die Standardausgabe umgeleitet. Interessant ist der Codeschnipsel
Process compiler = new Process(); compiler.StartInfo.FileName = "csc.exe"; compiler.StartInfo.Arguments = "/r:System.dll /out:sample.exe stdstr.cs"; compiler.StartInfo.UseShellExecute = false; compiler.StartInfo.RedirectStandardOutput = true; compiler.Start(); Console.WriteLine(compiler.StandardOutput.ReadToEnd()); compiler.WaitForExit();
Sorry für den späten Funken. Schau dir aber die Microsoft Seite trotzdem mal an.
Gruß
Markus Seidl
-
Ups ist ja das gleiche was du hast :P, und wenns nicht funktioniert, stimmt vielleicht ein Parameter nicht. Das muss ich mal daheim ausprobieren, hock hier in der Schulung vor na Suse 9.1. An Mono komme ich nicht ran, weil der lustiche admin nen Proxy dazwischen hat, und ich kann nur aufs HTTP Protokoll zugreifen.
Du machst ja mit deinem Code nix falsch, schonmal gedebugged, und geschaut wo er hängen bleibt?
Gruß
Markus Seidl
-
Angren Aldaron schrieb:
schonmal gedebugged, und geschaut wo er hängen bleibt?
Jo, wie gesagt beim Aufruf von ReadToEnd bzw. ReadLine scheint er in eine Entlos-Schleife zu geraten, da er den nachfolgenden Code nicht mehr ausführt, aber auch keine Exception wirft. Womöglich wartet er auf eine End-of-Line- oder End-of-File-Sequenz, die er nie erhält. Aber das kann ich mir eigentlich auch nicht so recht erklären, da das Konsolenprogramm wenn ich es von Hand aufrufe zu funktionieren scheint.
Gruß
Schrankwand
-
Also ich stelle jetzt mal fest. Du gehst mit MapPath her und ermittelst den Ordner in dem deine Anwendung läuft. Innerhalb dieses Ordner gibt es nochmal einen Ordner namens "bin", welcher die Datei recognize.exe enthält. Also wenn deine Anwendung, sagen wir mal, in D:\myprograms liegt und von dort aus ausgeführt wird. Dann ist der komplette Pfad den du da baust D:\myprograms\bin\recognize.exe
Da Du extra Unix erwähnt hast auch hier noch ein Beispiel. Dein Programm liegt in, sagen wir mal, /home/myuser/myprograms, dann ist der Pfad den du da bastelst /home/myuser/myprograms/bin/recognize.exe
Stimmt das?
Gruß
Markus Seidl
-
Der Pfad stimmt natürlich. Ansonsten würde beim Aufruf von proc.Start() ja schon eine Exception geworfen werden.
Das Problem war das die Konsolenanwendung noch auf eine Benutzereingabe gewartet hat bevor es das letzte \n ausgibt un die Anwendung beendet. Das habe ich nun behoben.
Gruß
Schrankwand
-
Angren Aldaron schrieb:
Ups ist ja das gleiche was du hast :P, und wenns nicht funktioniert, stimmt vielleicht ein Parameter nicht. Das muss ich mal daheim ausprobieren, hock hier in der Schulung vor na Suse 9.1. An Mono komme ich nicht ran, weil der lustiche admin nen Proxy dazwischen hat, und ich kann nur aufs HTTP Protokoll zugreifen.
Du machst ja mit deinem Code nix falsch, schonmal gedebugged, und geschaut wo er hängen bleibt?
Gruß
Markus Seidl
BTW:
Hmm, da könnte dir Ultr@VNC helfen, hat einen normallen Remote Viewer und einen Java-Viewer, somit kommst du über jeden Java-Fähigen Browser rein...
-
Cool, da kann ich mir ja den Mund fusselig reden
. Aber cool, dass du es jetzt geschafft hast, nebenbei habe ich dabei auch wieder ne Menge mitgekriegt.
Danke, werds mir mal genauer anschauen.
Gruß
Markus Seidl