Mini-Tutorial: Administratorrechte und VB.NET

    • Allgemein

    Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

      Mini-Tutorial: Administratorrechte und VB.NET

      Hallo zusammen,
      ich dachte mir es wird mal wieder Zeit für ein neues Tutorial. Diesmal handelt es sich jedoch nur um ein Mini-Tutorial zum Thema Administratorrechte und VB.NET.




      Was lernen Sie in diesem Tutorial?
      In diesem Tutorial werde ich Ihnen zeigen, wie Sie auslesen, ob Ihre Anwendung als Administrator (oder als eine andere Gruppe) ausgeführt wird oder verlangen,
      dass Ihre Anwendung als Administrator ausgeführt wird.

      Mir ist außerdem bewusst, dass es schon mehrere Tutorials im Internet zu diesem Thema gibt.




      Was benötigen Sie?
      Grundsätzlich benötigen Sie, da es sich hier um ein sehr einfaches kurzes Tutorial handelt keine wirklichen Vorkenntnisse.
      Wobei Grundlagenwissen niemals schaden kann. Diesbezüglich verweise ich gerne auf folgende Literatur:
      microsoft.com/germany/msdn/akt…005dasentwicklerbuch.aspx
      microsoft.com/germany/msdn/akt…008dasentwicklerbuch.aspx Beziehungsweise der Sammelthread dazu:
      [Allgemein] Entwickler-Ressourcen und Tools, Bücher und WebCasts



      Los geht's!
      Zu Beginn möchte ich Ihnen zeigen, wie Sie verlangen können, dass Ihre Applikation als Administrator ausgeführt werden muss.
      Dazu öffnen Sie die app.manifest Datei Ihres Projektes. Die app.manifest Datei finden Sie wenn Sie auf My Project > Anwendung > Windows-Einstellungen anzeigen klicken.



      Nun können Sie in dieser Datei, die benötigten Privilegien beim Start anfordern.
      Um diese Privilegien zu ändern, müssen Sie lediglich folgende Zeile umschreiben:

      XML-Quellcode

      1. <requestedExecutionLevel level="asInvoker" uiAccess="false" />

      Nun können Sie sich zwischen folgenden Möglichkeiten entscheiden:
      <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> Hiermit verlangt die Anwendung, dass sie als Administrator ausgeführt wird.
      <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> Hier verlangt die Anwendung, dass sie mit den höchsten möglichen Rechten ausgeführt wird.

      Nehmen wir zum Beispiel level="requireAdministrator". Wenn Sie Ihre Anwendung nun erstellen, öffnet sich der UAC-Dialog:

      Und dadurch wird Ihre Anwendung als Administrator ausgeführt.



      Administratorrechte überprüfen
      Nun möchte ich Ihnen zeigen, wie Sie ganz einfach überprüfen können, ob Ihre Anwendung als Administrator ausgeführt wird.
      Dazu importieren Sie folgenden Namespace:
      Imports System.Security, System.Security.Principal
      (beziehungsweise schalten Sie die Option: Option Strict On auf True.)
      Dies bezüglich hier eine kleine Information zu Option Strict On:
      erfinderdesrades.unitweb.de/Pr…/Blogs/WarumStrictOn.html

      Als nächstes erstellen Sie zwei neue Objekte. Eines vom Typ WindowsIdentity und eines vom Typ WindowsPrincipal.

      VB.NET-Quellcode

      1. Dim wiIdentity As WindowsIdentity
      2. Dim wpPrincipal As WindowsPrincipal
      C#

      C-Quellcode

      1. WindowsIdentity wiIdentity;
      2. WindowsPrincipal wpPrincipal;


      Jetzt erstellen wr einfach eine Eigenschaft, die uns wiedergibt, ob die Anwendung als Administrator ausgeführt wird:
      VB.NET

      VB.NET-Quellcode

      1. ''' <summary>
      2. ''' Überprüft, ob die Anwendung als Administrator ausgeführt wird.
      3. ''' </summary>
      4. <Browsable(True)>
      5. <Description("Überprüft, ob die Anwendung als Administrator ausgeführt wird.")>
      6. Public ReadOnly Property IsAdmin As Boolean
      7. Get
      8. wiIdentity = WindowsIdentity.GetCurrent 'Hohlt sich die aktuelle WindowsIdentität.
      9. wpPrincipal = New WindowsPrincipal(wiIdentity) 'Hohlt sich die Privilegien dieser Identität.
      10. Return wpPrincipal.IsInRole(WindowsBuiltInRole.Administrator)
      11. End Get
      12. End Property
      C#

      C-Quellcode

      1. /// <summary>
      2. /// Überprüft, ob die Anwendung als Administrator ausgeführt wird.
      3. /// </summary>
      4. [Browsable(true)]
      5. [Description("Überprüft, ob die Anwendung als Administrator ausgeführt wird.")]
      6. public bool IsAdmin {
      7. get {
      8. wiIdentity = WindowsIdentity.GetCurrent;
      9. //Hohlt sich die aktuelle WindowsIdentität.
      10. wpPrincipal = new WindowsPrincipal(wiIdentity);
      11. //Hohlt sich die Privilegien dieser Identität.
      12. return (wpPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
      13. }
      14. }


      Anschließend können Sie einfach mit: If IsAdmin Then überprüfen ob die Applikation als Administrator gestartet worden ist.



      Andere Privilegien überprüfen
      Sie können diese Eigenschaft natürlich ganz einfach so umschreiben, dass sie eine andere Rolle (bzw. Privilegien) überprüft.
      Schreiben Sie dazu einfach: wpPrincipal.IsInRole(WindowsBuiltInRole.Administrator) um.
      Damit können Sie zum Beispiel Funktionen sperren, falls der Benutzer nur einen Gast-Account besitzt. Beispiel:
      VB.NET

      VB.NET-Quellcode

      1. ''' <summary>
      2. ''' Überprüft, ob die Anwendung von einem Gast ausgeführt wird.
      3. ''' </summary>
      4. <Browsable(True)>
      5. <Description("Überprüft, ob die Anwendung von einem Gast ausgeführt wird.")>
      6. Public ReadOnly Property IsGuest As Boolean
      7. Get
      8. wiIdentity = WindowsIdentity.GetCurrent 'Hohlt sich die aktuelle WindowsIdentität.
      9. wpPrincipal = New WindowsPrincipal(wiIdentity) 'Hohlt sich die Privilegien dieser Identität.
      10. Return wpPrincipal.IsInRole(WindowsBuiltInRole.Guest)
      11. End Get
      12. End Property
      C#

      C-Quellcode

      1. /// <summary>
      2. /// Überprüft, ob die Anwendung von einem Gast ausgeführt wird.
      3. /// </summary>
      4. [Browsable(true)]
      5. [Description("Überprüft, ob die Anwendung von einem Gast ausgeführt wird.")]
      6. public bool IsGuest {
      7. get {
      8. wiIdentity = WindowsIdentity.GetCurrent;
      9. //Hohlt sich die aktuelle WindowsIdentität.
      10. wpPrincipal = new WindowsPrincipal(wiIdentity);
      11. //Hohlt sich die Privilegien dieser Identität.
      12. return (wpPrincipal.IsInRole(WindowsBuiltInRole.Guest))
      13. }
      14. }




      Das war's!
      Und das war es auch schon mit diesem Mini-Tutorial.
      Ich hoffe sehr, dass ich Ihnen damit weiterhelfen konnte.

      Mit freundlichen Grüßen
      Martin Pfeiffer (Gather)
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gather“ ()

      Vielleicht sollte man noch erwähnen, dass es mit

      VB.NET-Quellcode

      1. My.User.IsInRole

      ein Einzeiler ist.

      Noch einen kleinen Verbesserungsvorschlag:
      Die Function wpPrincipal.IsInRole(WindowsBuiltInRole.Administrator) gibt bereits einen Boolean zurück, welchen du direkt Returnen kannst.
      Mfg
      Vincent

      @VincentTB
      Ja aber, haben wir nicht gelernt, dass der My.-Namespace böse ist? :)

      VincentTB schrieb:

      Die Function wpPrincipal.IsInRole(WindowsBuiltInRole.Administrator) gibt bereits einen Boolean zurück, welchen du direkt Returnen kannst.

      Jup, hätte ich entfernen können.
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!