Probleme bei Interaktion mit Prozeß

Status
Nicht offen für weitere Antworten.

flowingmind

Mitglied
hi!
Ich hab endlos gesucht und gelesen, aber...null Lösung.
Vielleicht jetzt mal.

So siehts aus:

Ich muss den RUNAS - Befehl in einer shell starten.
Normalerweise(also ohne Java) geht das so :Runas in cmd-Fenster eingeben , zb <RUNAS /user😀ummy progi.exe>
dann enter drücken und es erscheint die Aufforderung zur Eingabe des Kennwortes zB:

Geben Sie das Kennwort ein für Dummy:_

Dann gib man das Kennwort ein drückt enter und das wars.

Das Kennwort lässt sich nicht als Kommandozeilenparameter übergeben. =-(
Sonst wärs zu einfach.

Nun versuch ich das aus meinem Javacode heraus etwa so:
Code:
		BufferedWriter bsow = null;
        	InputStreamReader isr=null;
		OutputStreamWriter osw=null;
		BufferedReader br=null;
		BufferedWriter bw=null;
		System.err.println("Start external Programs! ");
		try
		{
			Runtime rt = Runtime.getRuntime();
			Process ps = rt.exec("runas /user:Dummy progi.exe");

			isr=new InputStreamReader(ps.getInputStream());
			osw=new OutputStreamWriter(ps.getOutputStream());
			
			bw=new BufferedWriter(osw);
			br=new BufferedReader(isr);
			
			bw.write("dasPasswort");
			bw.flush();
			
			String sOutput = "";

			while ((sOutput = br.readLine()) != null)
			{
				System.err.println(sOutput);
			} //while

und das ist das Ergebnis:

Geben Sie das Kennwort ein für Dummy:RUNAS-Fehler: Es konnten keine Eingaben eingelesen werden.

Also bekomme irgendwie mein Passwort nicht in die Shell bzw in den Process.

????

Was muss ich anders machen?

thx Dirk
 
EDIT: Altes Post gelöscht, da unsinnig...

Versuchs mal so:

Code:
 bw.write("dasPasswort\r\n");
 bw.flush();

Oder nimm einen PrintWriter...mit dem funktionierts
 
flowingmind hat gesagt.:
hi!
...
Ich muss den RUNAS - Befehl in einer shell starten.
Normalerweise(also ohne Java) geht das so :Runas in cmd-Fenster eingeben , zb <RUNAS /user😀ummy progi.exe>
dann enter drücken und es erscheint die Aufforderung zur Eingabe des Kennwortes zB:

Geben Sie das Kennwort ein für Dummy:_

Dann gib man das Kennwort ein drückt enter und das wars.

Das Kennwort lässt sich nicht als Kommandozeilenparameter übergeben. =-(
Sonst wärs zu einfach.

Nun versuch ich das aus meinem Javacode heraus etwa so:
Code:
...		try
		{
			Runtime rt = Runtime.getRuntime();
			Process ps = rt.exec("runas /user:Dummy progi.exe");
...

und das ist das Ergebnis:

Geben Sie das Kennwort ein für Dummy:RUNAS-Fehler: Es konnten keine Eingaben eingelesen werden.

Also bekomme irgendwie mein Passwort nicht in die Shell bzw in den Process.

????

Was muss ich anders machen?

thx Dirk

Im Grunde ist das hier ein ähnliches Problem, wie kürzlich bei der Frage nach dem Starten von Windword. Ersetze in deinem Code die entsprechende Zeile durch folgende Zeile:

Code:
Process ps = rt.exec("cmd /c start runas /user:Dummy progi.exe");

Der Hintergrund ist der, dass auf Windows-Systemen man auf der Kommandozeilenebene "/c" gefolgt von "start" eingeben muss, da so ein neuer Prozess gestartet wird (du hattest hier zudem versäumt den Kommandozeileninterpreter aufzurufen); während "cmd" allein nur den Kommandozeileninterpreter aufruft.
 
meez hat gesagt.:
EDIT: Altes Post gelöscht, da unsinnig... >>> Was heisst das?

\r\n hab ich probiert -> bringt nichts .

Code so verändert :

Code:
		PrintWriter pw=null;
		BufferedReader br=null;
		BufferedWriter bw=null;
		//System.err.println("Start external Programs: " + cmd);
		try
		{
			Runtime rt = Runtime.getRuntime();
                       
                        System.out.println("vor exec()");

			Process ps = rt.exec("runas /user:Dummy progi.exe");


			isr=new InputStreamReader(ps.getInputStream());
			osw=new OutputStreamWriter(ps.getOutputStream());
			
			bw=new BufferedWriter(osw);
			br=new BufferedReader(isr);
			pw=new PrintWriter(osw);

			String sOutput = "";

			while ((sOutput = br.readLine()) != null)
			{
				System.err.println("1---->"+sOutput);
			} //while
			

			
                        System.out.println("vor pw.write()");

			pw.write("dasPasswort\r\n");

			String sOutput = "";

			while ((sOutput = br.readLine()) != null)
			{
				System.err.println("2---->"+sOutput);
			} //while

das Ergebnis:

vor exec()
1---->Geben Sie das Kennwort ein für Dummy:RUNAS-Fehler: Es konnten keine Eingaben eingelesen werden.
vor pw.write()
java.io.IOException: Die Pipe wird gerade geschlossen
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:260)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:66)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:124)
at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:410)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
at java.i😵utputStreamWriter.flush(OutputStreamWriter.java:213)
at java.io.BufferedWriter.flush(BufferedWriter.java:230)
at SystemCallHandler.main(SystemCallHandler.java:48)
[/code]


Ich komm garnicht zu schreiben in den Process!


???
 
Code:
Process ps = rt.exec("cmd /c start runas /user:Dummy progi.exe");

Hab ich !

Eine neue Shell wird gestartet -> gut!

Aber ich muss das Passwort immer noch von hand eingeben.
Ich will es der shell senden.

???

thx immer noch der Dirk
 
flowingmind hat gesagt.:
Hab ich !

Eine neue Shell wird gestartet -> gut!

Aber ich muss das Passwort immer noch von hand eingeben.
Ich will es der shell senden.

...

Ab Windows XP gibt es eine weitere Variante des Befehls:

runas: /user:Administrator /savecred "c:\Programme\Testprogramm\start.exe"

Der neue Befehl /savecred bewirkt, dass beim 2. Starten nicht mehr das Passwort abgefragt wird, da Windows sich nun die Information gespeichert hat.

siehe http://www.wintotal.de/Tipps/Eintrag.php?RBID=3&TID=523&URBID=14

Vielleicht nützt dir das etwas, ansonsten scheint es ein MS-spezifisches Problem zu sein.
 
Was mir gerade noch eingefallen ist:

Du kannst natürlich auch mit VB-Skript arbeiten. Hiermit hast dur vielmehr Möglichkeiten als mit den Befehlen der Shell/des Kommandozeileninterpreters.

So kannst du an ein bestimmtes Fenster z.B. bestimmte Eingaben senden, du kannst eine bestimmte Zeit auf die Eingabe warten etc.
 
So weit so gut!

Ich kann aus verschiedenen Gründen kein VB oder so nehmen.

Hat jemand vielleicht Code wie man den mit einer Shell interagiert .
Zum Beispiel <echo hallo welt> hinschickt und ausführen lässt?

Selbst das funtioniert nicht .habs so probiert:


Code:
                    	Runtime rt = Runtime.getRuntime();
			System.out.println("vor exec()");
			Process ps = rt.exec("cmd /c start");
			System.out.println("nach exec()");


			isr=new InputStreamReader(ps.getInputStream());
			osw=new OutputStreamWriter(ps.getOutputStream());
			
			bw=new BufferedWriter(osw);
			br=new BufferedReader(isr);
			
			String sOutput = "";

			while ((sOutput = br.readLine()) != null)
			{
				System.err.println("1---->"+sOutput);
			} //while
			

			
 		        System.out.println("vor pw.write()");	
			bw.write("echo Hallo Welt\r\n");
			bw.flush();

Das muss doch irgendwie gehen![/code]
 
Also bei mir geht das ohne Probleme, einem Prog einen String zu senden..
Einfach über einen PrintWriter mit println();
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben