# der Befehl "runas"



## Kampfzwereg (4. Apr 2012)

Hallo ,
ich hab schon bei google und hier im Forum gesucht, bin aber auf nichts produktives gestoßen was funktioniert hat -.-' . Auch im chat konnte mir keiner weiterhelfen.
 Also ich würde gerne aus meinem Java-Programm heraus ein anderes Programm starten. Dazu bin ich halt auf den Befehl runas gestoßen. Das Programm wollte ich dann mittels Button aufrufen. 

1)Es passiert nix beim Betätigen des Buttons. Der pfad muss aber stimmen, da ich das Programm mit cmd und dem gleichen Pfad starten kann.
2)Er verlangt immer ein Password, dass könnte auch der Grund sein, warum nichts passiert weil er auf eine Passwordeingabe wartet. Ich hab im Internet gesucht, ob es einen Parameter gibt, wo man das password eingeben kann, hab aber nix gefunden, was funktioniert hat. 
3)Ich möchte, dass er das Programm sinlence startet. Das macht er auch nicht, wenn ichs bei cmd eingebe.


```
Process p = Runtime.getRuntime().exec( "runas /user:Beispieluser \"M:/Beispielprog/BEISPIELPROG.exe\"-s");
```
 Hoffe es kann mir jemand helfen.

Lg Kampfzwereg


----------



## Gast2 (4. Apr 2012)

1) Du musst exec ein Array übergeben, sowas wie ("runas", "user:Beispieluser", ...).
2) Das Passwort (inkl. Enter) könntest du unter Umständen über den OutputStream des Prozesses rausschicken.


----------



## tfa (4. Apr 2012)

Dem runas-Programm kann man kein Passwort an der Kommandozeile übergeben:Runas
Vielleicht kannst du was mit der /savecred-Option anfangen.


----------



## Kampfzwereg (4. Apr 2012)

> Du musst exec ein Array übergeben, sowas wie ("runas", "user:Beispieluser", ...).




So?Das hatte ich vorher da stehen.


```
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(new String[] { "K:/Webcamshot/WEBCAMSHOT.exe", "-s" });
```

Ja das funktioniert dann auch . Also ich sehe, wie sich das programm öffnet. Aber das Programm macht nix, da ich es als Admin ausführen muss. Selbst wenn ich draufklicke funktioneirt das nicht , ich muss es immer als Admin ausführen.



> Das Passwort (inkl. Enter) könntest du unter Umständen über den OutputStream des Prozesses rausschicken.



okaaay. und wie würd sowas im Prinzip funktionieren? Man sagt dem programm es sol das Password und enter bei der PWAbfrage schreiben?...das würd ja nich gehen, wenn ich es silence ausführen will oder?


----------



## Gast2 (4. Apr 2012)

Ja, du musst das Programm dann natürlich noch mit runas starten:

```
Process process = runtime.exec(new String[] { "runas", "/user:Username", "K:/Webcamshot/WEBCAMSHOT.exe", "-s" });
```
So könnte das vllt klappen.

EDIT:
Wie erfolgt denn die Eingabe des Passworts? Über die Konsole?


----------



## Kampfzwereg (4. Apr 2012)

ja wie gesagt, ich glaube das klappt auch so, wie du es jetzt gepostet hats nur das mit pw is das Prob. Wenn ich den Befehl runas+Parameter(Pfad und user) bei cmd eingebe kommt in der nächste Zeile erst ne PW abfrage . dass kann ich dann eingeben, enter und das Prog startet.


----------



## Gast2 (4. Apr 2012)

Wenns über die Konsole eingegeben wird dann solltest du mal versuchen das Passwort auf dem OutputStream zu schreiben. An den kommst du über 
	
	
	
	





```
process.getOutputStream()
```
 ran.


----------



## Kampfzwereg (4. Apr 2012)

also quasie so, dass ich meine Prog nicht sage, dass es das Progmramm öffnen soll, sonder cmd starten soll und da dann einfach den Befehl zum öffnen eingeben soll um das Programm dann zu starten?


----------



## Gast2 (4. Apr 2012)

Nein, du startest runas ganz normal und schreibst dann dein Passwort rein. Wenn das nicht klappt dann über den Umweg cmd.


----------



## Kampfzwereg (4. Apr 2012)

ok ich machs jetzt eifnach mal so , dass ich cmd öffne

```
Process process = new ProcessBuilder(new String[] { "cmd", "/C","start", "cmd" }).start();
```
und ichm sage er soll das Prog starten und ihm dann noch das pw sage. Ich glaub da ist die Wahrscheinlichkeit höher, dass es funzt.
Du meintest das geht mit dem OutputStream. Wahrscheinlich ist das so ähnliuch wie mit dme FileWriter oder? Du erstellst nen fw, der erzeugt ne neue File, und mit write schreibste da was rein. Gibts da speziell für cmd auch nommal was oder ist das der OutputStream. Wenn ja hasste dafür nen tutorial ?


----------



## Gast2 (4. Apr 2012)

Wiiie gesagt, es gibt die Methode getOutputStream():
Process (Java Platform SE 7 ))

Über den kannst du dann rausschreiben.


----------



## r.w. (5. Apr 2012)

Eine Alternative wäre psexec.exe.

Damit kannst Du nicht nur das Kennwort als Parameter übergeben,
sondern sogar Programme auf anderen Rechnern im Netz starten.

Auch sehr nützlich in der Administration zur Skript gesteuerten 
Silent-Installation von Programmen. 

VG ROlf


----------



## irgendjemand (5. Apr 2012)

eine weitere *wohlmöglich overkill* variante wäre deine app in ein JAR zu packen ... und dieses dann mit Launch4J zu ner exe zu wrappen ...
dabei kann man auch gleich ein manifest mit einbauen lassen was dann UAC automatisch triggert ... und somit deine gesamte app als "admin" läuft was auch an sub-prozesses vererbt wird


----------



## Kampfzwereg (5. Apr 2012)

@ r.w. : jo das wer ich auch nochmal testen. danke .

@irgendjemand : danke erstmal für die antwort aber ich vbersteh leider kein wort, das nächste mal den Beitrag bitte fachwortarm halten


----------

