2015-07-27 11 views
5

Ich möchte ein anderes Programm starten, das als Benutzer von einem Programm ausgeführt wird, das als Administrator ausgeführt wird.Starten Sie einen Prozess als Benutzer aus einem Prozess, der als Administrator ausgeführt wird

Das Problem ist, dass das zweite Programm Outlook verwenden muss, was nicht möglich ist, wenn das Programm als admin läuft. Das Hauptprogramm muss als Admin ausgeführt werden.

Ich habe schon kommen mit diesen beiden Lösungen:

Process.Start("cmd.exe", @"/C runas.exe /savecred /user:" + Environment.UserDomainName + "\\" + Environment.UserName + " " + "\"SomeProgram.exe" + "\""); 

oder

Process.Start("explorer.exe", "SomeProgram.exe"); 

Aber ich habe ein Problem mit beiden Lösungen. Der erste fragt den Benutzer nach dem Passwort (nur das erste Mal nach dem Neustart von Windows). Das zweite Problem wird in Zukunft nicht funktionieren, denn soweit ich es herausfand, wird es als Bug betrachtet und wahrscheinlich mit einem zukünftigen Update behoben.

Also würde ich gerne wissen, gibt es eine andere Lösung, wo der Benutzer sein Passwort nicht eingeben muss?

Dies scheint für mich zu arbeiten:

Process.Start("cmd.exe", @"/C runas.exe /TrustLevel:0x20000 " + "\"SomeProgram.exe" + "\""); 
+1

Raymond Chen, einen guten Job zu beschreiben, tat dies in [Wie kann ich einen unerhöhten Prozess von meinem erhöhten Prozess und umgekehrt zu starten?] (Http://blogs.msdn.com/b/oldnewthing/archive/ 2013/11/18/10468726.aspx) (die auch alle Arten von Details umfasst, wie zum Beispiel, als die Höhe andere Kontoanmeldeinformationen als die für den Rest der Sitzung verwendete verwendete) –

+0

Aber ist das nicht nur eine andere Art, das zu verwenden exploer.exe um den Job zu machen? Wie auch immer ich eine andere Lösung gefunden habe, habe ich es dem ursprünglichen Beitrag hinzugefügt. – FKorni

+0

Geht Ihre Lösung korrekt mit der Entfernung von Alices Administratorkonto zu Bobs Benutzerkonto um (unter Verwendung der Beispiele von Raymonds Link)? –

Antwort

1

Process Klasse StartInfo Eigenschaft, die eine Instanz von ProcessStartInfo Klasse. Diese Klasse legt UserName, Domain und Password Mitglieder offen, um den Benutzer anzugeben, den Sie den Prozess ausführen möchten.

Process myProcess = new Process(); 
myProcess.StartInfo.FileName = fileName; 
myProcess.StartInfo.UserName = userName; 
myProcess.StartInfo.Domain = domain; 
myProcess.StartInfo.Password = password; 
myProcess.Start(); 
+0

Das würde bedeuten, dass ich das Benutzerpasswort kennen muss, was nicht der Fall ist. Das Programm wird von vielen verschiedenen Benutzern verwendet, daher ist dies für mich keine Option. – FKorni

+0

@FKorni Ich glaube nicht, dass Sie einen anderen Benutzer annehmen können, ohne die Anmeldeinformationen zu kennen –

+0

Nun fordert das Hauptprogramm Administratorrechte mit dem Manifest an, aber das zweite Programm sollte nur mit dem normalen Benutzer der aktuellen Sitzung ausgeführt werden. – FKorni

Verwandte Themen