"Der Handle ist ungültig", wenn .net console via java ausgeführt wird

8

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?

    
Mechanical snail 29.11.2008, 10:23
quelle

6 Antworten

10

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.

    
waqas 23.01.2009 07:46
quelle
0

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.

    
Marc Gravell 29.11.2008 11:03
quelle
0

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.

    
Hosam Aly 29.11.2008 13:23
quelle
0

Versuchen Sie dies, um den Ausgabestrom des Aufrufbefehls

zu erhalten %Vor%     
Markus Lausberg 23.01.2009 08:25
quelle
0

Dies kann davon abhängen, wie Ihre Java-Anwendung ausgeführt wird. Wenn Ihre Java-Anwendung keine Konsole hat, wenn es Probleme geben kann, wenn die Anwesenheit der Konsole für Ihren inneren Prozess notwendig ist. Lesen Sie das .

    
okutane 23.01.2009 08:51
quelle
0

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%     
Korey 21.08.2013 20:04
quelle

Tags und Links