2016-09-12 1 views
2

Ich versuche, ein externes Programm (.exe) aus einer Java-Datei auszuführen. Dies ist mein Code so weit:Übergeben von Java-Eingabe in externe Anwendung

try{ 
       Process process = new ProcessBuilder(path).start(); 
       InputStream is = process.getInputStream(); 
       InputStreamReader isr = new InputStreamReader(is); 
       BufferedReader br = new BufferedReader(isr); 
       String line; 




       while ((line = br.readLine()) != null) { 
        System.out.println(line); 
       } 

       } 
       catch(Exception e){e.printStackTrace();} 

Die erste Ausgabe des Programms auf dem Konsolenfenster meines Java-Programms angezeigt wird, aber leider bedarf es ein Benutzerkennwort und Enter zu drücken. Ich habe bereits versucht, viele mögliche Lösungen zu implementieren, die ich im Internet gefunden habe wie .inheritIO() oder die Befehle innerhalb von Prozessargumenten weiterleiten, zB Process process = new ProcessBuilder (Pfad, "pw", "/ c"). Start() ; aber das funktioniert nicht. Ich verstehe nicht, warum der Eingabestream einwandfrei funktioniert, aber jede Art von Ausgabestream scheint nicht zu funktionieren.

+0

Was ist die EXE? –

+1

Nun, Sie haben nicht erwähnt, dass Sie versuchen, den Ausgabestream des Prozesses zu öffnen (eigentlich ist es der Eingabestream, es ist ein Ausgabestream aus der Sicht von Java). Hast du das versucht? Denken Sie daran, dass viele Programme eine spezielle Interaktion für Kennwörter haben, die keine Streams, sondern direktes Lesen von Schlüsseln oder direkten Gerätezugriff umfassen. – RealSkeptic

+0

Ich bin mir nicht sicher, aber ich denke, das externe Programm ist entweder in Java oder in C/C++ geschrieben. Ist das für meinen Java-Code entscheidend? – FlowRyan

Antwort

0

Sie dieses Rezept folgen:

  1. Verzichten Sie Java für einen Moment: sehen, wenn Sie einen Weg finden, können mit diesem Werkzeug cmd/Shell aufrufen und das Passwort als Kommandozeilenargument (Bedeutung zu geben: mache solche Experimente, ohne eine weitere Ebene der Komplexität hinzuzufügen). Wenn das funktioniert, nehmen Sie diese Argumente in Ihr Java-Programm, um sie dort zu verwenden.
  2. Wenn das nicht funktionierte, müssen Sie herausfinden, ob Sie die Kennwörter für den Prozess "schreiben" können; Es gibt viele Beispiele aus there wie man das macht.
  3. Wenn das auch nicht funktioniert, dann besteht die Möglichkeit, dass Ihre .exe das Passwort nicht mit stdin liest. In diesem Fall können Sie nur Folgendes tun: Ändern Sie die Funktionsweise von .exe. Beispiel: Wenn Ihre .exe tatsächlich eine "Remote-Aktion" auf einem anderen System ausführt (für das Sie das Passwort benötigen); dann könnten Sie versuchen, eine passwortlose Kommunikation herzustellen; basierend auf privaten/öffentlichen Schlüsselpaaren.
Verwandte Themen