Ich versuche, die dot net Konsolenanwendung über Java zu starten:
%Vor%Ich bekomme folgende Ausgabe:
%Vor%Beim Ausführen direkt über die Konsole (Windows) gibt es kein Problem:
%Vor%Ich führe mehr Anwendungen in dieser Form aus, habe aber kein Problem.
Habe diesen Stapel-Trace:
%Vor%Das Problem liegt vor, wenn die .net-App versucht, auf die Konsole zu schreiben. Was ist die Lösung?
hat die Zeile gefunden, die das Problem verursacht hat:
%Vor%Weißt du warum?
Die Konsolenanwendung versucht, die Cursorposition für eine Konsole festzulegen. Dies ist nicht möglich, da es in der Tat keine Konsole gibt. Alle Operationen, die nicht zu einem einfachen Lesen oder Schreiben führen, verursachen wahrscheinlich Fehler, wenn keine Konsole vorhanden ist (da die meisten von ihnen einen Konsolen-Ausgabepuffer benötigen).
Es ist eine schlechte Idee, Dinge wie das Setzen der Cursorposition oder das Löschen des Bildschirms in Konsolenanwendungen, die Sie automatisieren möchten, zu tun. Eine grundlegende Problemumgehung besteht darin, die fehlerhafte Anweisung einfach in einen try-catch zu setzen und die Ausnahme zu verwerfen. Auf der MSDN-Seite in System.Console :
Sie sollten die Console-Klasse nicht verwenden um die Ausgabe unbeaufsichtigt anzuzeigen Anwendungen wie Server Anwendungen. Ähnlich, Anrufe an Methoden wie Write und WriteLine haben keinen Effekt in Windows Anwendungen.
Konsolen-Klassenmitglieder, die funktionieren normalerweise wenn der zugrunde liegende Stream ist auf eine Konsole gerichtet könnte einen werfen Ausnahme, wenn der Stream umgeleitet wird, zum Beispiel zu einer Datei. Folglich, Programmieren Sie Ihre Anwendung zu fangen System.IO.IOException, wenn Sie umleiten ein Standard-Stream.
Schwer zu diagnostizieren, ohne mehr Details - vielleicht Berechtigungen ... ein wenig Ausnahmebehandlung (vielleicht Stack-Trace zu stderr schreiben) würde enorm helfen. aber nicht viel Hilfe, wenn Sie die App nicht besitzen.
Wenn Sie nirgendwohin kommen, können Sie versuchen, den Reflektor zu verwenden, um zu sehen, was die .NET-App ist tut während "Detecting" - es könnte helfen, die Ursache zu identifizieren.
Ich glaube nicht, dass es ein Problem mit dem Programm Ihres Freundes gibt. Sie müssen wahrscheinlich den Ausgabestream des Prozessobjekts abrufen, das Sie von Runtime.getRuntime (). Exec (Befehlszeile) erhalten, und eine read () - Methode oder etwas aufrufen. Es könnte funktionieren.
Versuchen Sie dies, um den Ausgabestrom des Aufrufbefehls
zu erhalten %Vor%Ich stieß auf das gleiche Problem, nur war es aus dem Ausführen einer c # -Konsolenanwendung über den SQL Taskplaner.
Ich glaube, das Problem ist, dass einige Konsolenmethoden und -eigenschaften (Console.WindowWidth, Console.CursorLeft) versuchen, die Konsolenausgabe zu manipulieren, was beim Umleiten der Konsole nicht möglich ist.
Ich habe den Abschnitt des Codes in einen einfachen try-catch-Block gepackt, und es funktioniert jetzt gut.
%Vor%