Adminrechte für eine Methode abrufen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Adminrechte für eine Methode abrufen

    Halloa,

    ich habe aktuell ein Problem, eher eine Fragestellung, dass ich für eine Routine im Programm Adminrechte brauche. Diese wird nur sehr selten benötigt und auch nur für Wissende angezeigt.
    Ich möchte natürlich nicht, dass bei jedem Start Adminrechte benötigt werden, sondern nur, wenn ich diese auch brauche.
    Ich hab mal gegooglet und auch gefunden wie ich prüfe ob der User selber über Adminrechte verfügt.
    Aber wie ich sauber hin bekomme für eine Methode die Rechte abzurufen, das hab ich noch nicht wirklich gefunden.
    Oder einfach nicht als solches erkannt.

    Gibt es hier irgendwo ein schönes Tut?
    Im Idealfall soll das Programm für die Ausführung einer Routine (bei berechtigten Nutzern - Steuerung über Domänengruppe, die ich abfrage) Adminrechte erfragen. Sonst jedoch bitte nicht.

    Geht das irgendwie gescheit?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    für eine Methode die Rechte abzurufen
    Hast Du was gefunden, einer Methode Adminrechte zu erteilen? Ich auch nicht.
    Das Programm oder gar nix.
    Überleg mal, diese Methode in ein anderes Programm auszulagern und diesem Adminrechte zu geben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    MemoAnMichSelbst schrieb:

    und auch gefunden

    Wie denn genau bzw. was ^^ ? Und geht ja um den Lokalen Admin..?

    Ansonsten habe ich mir damals immer bei Kunden ein paar Tricks angewöhnt, als die Aussage kam "Ja ich habe Adminrechte"
    Unter anderem: Über Windoof-Startmenü %WINDIR% -> Neuer Ordner -> Wenn geklappt dann Admin ansonsten kein Admin.

    Zur Methode:
    Versuch unter dem Pfad (mit Environment.GetFolderPath(Environment.SpecialFolder.System)) einen Ordner anzulegen, wenn das nicht möglich ist, hat der Nutzer keine Administrationsrechte.
    Ich würde anschließend überprüfen ob der Ordner angelegt worden ist und wenn ja halt weiter..ansonsten "MessageBox.Show("Bitte kontaktieren Sie Ihren Administrator. Für die weitere Vorgehensweisewerden Administrationsrechte benötigt")

    Was man auch beachten sollte, je nachdem was du installierst bzw. machst, ob auch die UAC deaktiviert ist..

    Gruß,
    Drahuverar
    Option Strict On!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drahuverar“ ()

    Du musst sauber unterscheiden zwischen
    1. Der am Betriebssystem angemeldete Benutzer hat Admin-Rechte,
    2. Das Programm wurde mit Admin-Rechten gestartet.
    Das ist zweierlei.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also ich prüfe aktuell ab, ob der User Adminrechte hat, indem:

    VB.NET-Quellcode

    1. Imports System.Security.Principal
    2. Imports System.Security.Permissions

    Und dann beim Start des Programms einmal weggeschrieben:

    VB.NET-Quellcode

    1. Dim isElevated = New WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator)


    Hmm, also das ist schade, dass das nicht geht. Ich möchte ja auch, dass der User nachdem es ausgeführt ist, wieder keine Adminrechte mehr hat. Also werde ich wohl um das Auslagern nicht drum herum kommen. Schade eigentlich.

    man kann natürlich auch der Funktion mitgeben...

    VB.NET-Quellcode

    1. <PrincipalPermission(SecurityAction.Demand, Role:="BUILTIN\Administrators")> _
    2. Private Sub Blubb
    3. End Sub
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    keine Adminrechte mehr hat
    Da hat das System die Hand drauf, im Programm selbst geht das nicht.
    Pack die betreffende Routine in ein separates Programm, starte es mit Passwort oder so.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Dann hat man eine weitere Anwendung auf dem Dateisystem liegen die ebenfalls gewartet werden muss und vor dem Aufrufen müsste man überprüfen ob die Datei existiert und was noch alles schief gehen kann, da ist die Methode die @nafets vorschlägt die optimalere.

    slice schrieb:

    die optimalere.
    Am oberalleroptimalsten wäre es, ohne Admirechte auszukommen. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, ich werde wohl einen Selbstaufruf basteln, der das eigene Programm invisible nur zum Ausführen des Befehls als Admin starten lässt.
    Schade eigentlich. Ich hätte es mir schöner gewünscht.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    @slice [OT] Dein letzter Beitrag ist viel optimaler als der letzte, obwohl der bis dahin der optimalste war. :D [/OT]
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!