.
Anmeldung | Registrieren | Hilfe
in Suchen

Aus .NET Applikation ein externes Programm mit Adminrechten starten

Letzter Beitrag 04. Feb 2010 14:10 von Snuffchen. 4 Antworten.
Seite 1 von 1 (5 Treffer)
Beiträge sortieren: Zurück Weiter
  • 27. Jan 2010 8:52

    • Snuffchen
    • Top 200 Mitwirkender
    • Registriert am 27. Jan 2010
    • Waldems
    • Beiträge 5
    • Punkte 85

    Aus .NET Applikation ein externes Programm mit Adminrechten starten

    Hallo, 

    ich steh gerade vor folgendem Problem: 

    Aus einer VB.NET Applikation rufe ich ein externes Programm auf. Soweit kein Problem (verwende hierzu System.Diagnostics und Process). Herausforderung ist aber nun, das diese externe Anwendung als Admin ausgeführt werden muss (unter Vista/Win7 mit rechter Maustaste "als Administrator ausführen"). Wie bekomme ich das hin?

    Gruß Patrick
    • IP-Adresse ist Registriert
  • 27. Jan 2010 9:51 Antwort zu

    • Timo Rehl
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 05. Mai 2009
    • Wald-Michelbach
    • Beiträge 591
    • Punkte 10.110
    • Moderator

    Aus .NET Applikation ein externes Programm mit Adminrechten starten

    Hallo Patrick,

    zunächst einmal herzlich willkommen hier im Forum, ich hoffe dass Du hier Spaß haben wirst und alle Deine Fragem beantwortet bekommst.

    Deine aktuelle Frage kann ich beantworten, bitte verzeihe mir aber, dass ich ein C# Mensch bin, deshalb könnten hier VB-Syntaxfehler enthalten sein.

    Um einen Prozess unter einem anderen Benutzerkonto zu starten, verwendet man schon richtigerweise die Process-Klasse. Um die Benutzerkontendaten zu übergeben verwendest Du am Besten die ProcessStartInfo-Klasse wie folgt:

    Dim myProcessStartInfo As New ProcessStartInfo("notepad.exe")
    Dim myPassword As New SecureString()
    
    ' StartInfo Objekt initialisieren
    myProcessStartInfo.WorkingDirectory = "C:\Windows\system32\"
    ' WorkingDirectory ist wichtig, wenn Benutzername und Passwort angegeben werden
    ' Standard ist zwar der system32 Ordner, aber wenn das abweichen sollte...
    myProcessStartInfo.UserName = "Administrator"
    
    ' Passwort zusammenbasteln, ist leider etwas umständlich, aber nicht wirklich komfortabler zu machen
    myPassword.AppendChar('P')
    myPassword.AppendChar('a')
    myPassword.AppendChar('s')
    myPassword.AppendChar('s')
    myPassword.AppendChar('w')
    myPassword.AppendChar('o')
    myPassword.AppendChar('r')
    myPassword.AppendChar('d')
    
    ' Passwort übergeben
    myProcessStartInfo.Password = myPassword
    
    ' Prozess starten
    Process.Start(myProcessStartInfo)


    Selbstverständlich muss Benutzername, Passwort und den auszuführenden Prozess angepasst werden, aber das Beispiel sollte weiterhelfen.

    Viel Spaß und fragen kostet nichts...

    Timo
    - theres no place like 127.0.0.1 -
    • IP-Adresse ist Registriert
  • 04. Feb 2010 11:29 Antwort zu

    • Snuffchen
    • Top 200 Mitwirkender
    • Registriert am 27. Jan 2010
    • Waldems
    • Beiträge 5
    • Punkte 85

    Aus .NET Applikation ein externes Programm mit Adminrechten starten

    Hallo Timo,

    vielen Dank schon mal für dein Beispiel. Ich frage mich nur ob das für den Fall unter Windows 7 zutrifft. Ich bin ja z.B. mit meinem normalen Benutzer 'Max Mustermann' am System angemeldet und will nun eine Anwendung starten. 

    Diese erfordert es, dass man mit der rechten Maustaste anklickt und wählt "als Administrator ausführen", ich vermute das Windows 7 ja immer noch 'Max Mustermann' als User hat, nur einen anderen Securitycontext!?!

    Gruß Patrick
    • IP-Adresse ist Registriert
  • 04. Feb 2010 12:15 Antwort zu

    • klaus_b
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 28. Jan 2008
    • Waldkraiburg
    • Beiträge 710
    • Punkte 11.415
    • Moderator

    Aus .NET Applikation ein externes Programm mit Adminrechten starten

    Hallo Patrick,

    Wenn du mit

    Snuffchen:
    ich vermute das Windows 7 ja immer noch 'Max Mustermann' als User hat,
    meinst, dass die Shell weiterhin als Max Mustermann ausgeführt wird, liegst du richtig.

    Snuffchen:
    nur einen anderen Securitycontext!?!
    Das kommt darauf an. Wenn 'Max Mustermann' zur Gruppe der Administratoren gehört, vermutest du richtig. Dann wird für diese Anwendung das Benutzerrecht angehoben. Diesen Vorgang nennt Windows dann den "elevation Mode".

    Wenn 'Max Mustermann' zur Gruppe der Benutzer gehört, wird das Programm nicht nur in einem anderen Kontext, sondern unter einem anderen Benutzerkonto ausgeführt.

    Was Timo dir da als Beispiel gezeigt hat, ist das gleiche wie das Windows eigene Tool RunAs. Beide Vorgehen, die von RunAs und der von Timo gezeigte Weg, fragen die Benutzerkontensteuerung ab, ob der anfordernde Benutzer zur Gruppe der Administratoren gehört oder nicht. Dementsprechend wird, wie bereits oben erklärt, entschieden.

    Ich hoffe, ich konnte dir die Vorgehensweiße etwas näher bringen.

    Servus,
    Klaus

    klaus_b@.NET
    Alles was an .NET und C# Spass macht, ... oder manchmal auch nicht.
    • IP-Adresse ist Registriert
  • 04. Feb 2010 14:10 Antwort zu

    • Snuffchen
    • Top 200 Mitwirkender
    • Registriert am 27. Jan 2010
    • Waldems
    • Beiträge 5
    • Punkte 85

    Aus .NET Applikation ein externes Programm mit Adminrechten starten

    Danke für die Hinweise, 

    habe es nun wie folgt hinbekommen:

    If System.Environment.OSVersion.Version.Major >= 6 Then
               myProcessStartInfo.Verb = "runas"
    End If

    Damit wird die externe Anwendung abhängig von der Betriebssystemversion als Administrator ausgeführt :)

    Gruß Patrick
    • IP-Adresse ist Registriert
Seite 1 von 1 (5 Treffer)

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum