Mittwoch, 12. September 2012

Prüfen ob aktueller Benutzer bestimmte Rolle (z.B. Administrator) hat

Eine einfache Lösung, um zu prüfen, ob der aktuelle Benutzer bestimmte Rollen (wie Adminstrator oder Gast) innehat, lautet folgendermaßen (im Beispiel wird geprüft, ob der Benutzer Gast ist):
WindowsIdentity CurrentIdentity = WindowsIdentity.GetCurrent();
WindowsPrincipal CurrentPrincipal = new WindowsPrincipal(CurrentIdentity);
bool UserIsAdmin = CurrentPrincipal.IsInRole(WindowsBuiltInRole.Guest);
Hierbei ergibt sich aber ab Windows Vista ein Problem, falls die zu prüfende Rolle Administrator ist. Obwohl der ausführende Benutzer eventuell Administrator ist, wird die Anwendung erst einmal ohne Administratorrechte ausgeführt, sodass fälschlicherweise false zurückgegeben wird.
Nur beim expliziten Ausführen der Anwendung als Administrator wird true zurückgegeben, allerdings logischerweise auch, wenn der Benutzer gar kein Administrator ist.

Um dieses in Windows 7 richtig umzusetzen, habe ich keine (einfache) Lösung gefunden, bei Gelegenheit werde ich etwas weiter probieren, aber vielleicht kommen ja auch ein paar gute Vorschläge von euch?

Kommentare:

  1. Hi Oliver,

    ich hab mal eine Frage, ob du einen Post erstellen könntest, wie man mit C# einem eigenen Dateityp bzw. einer eigenen Dateiendung ein Standardprogramm und ein Icon zuweisen kann. Ich habe dazu leider nichts gefunden.

    Vielen Dank schon mal
    Bene

    AntwortenLöschen
    Antworten
    1. Hi Bene,

      einen Post, wie man einem Dateityp ein Standardprogramm zuweisen kann, habe ich schon geschrieben, siehe hier: http://csharp-tricks.blogspot.de/2012/04/c-anwendung-als-standardprogramm-zum.html .
      Was genau meinst du mit Item? Dateien der Dateiendung nehmen ja das Icon des Standardprogramms an, und das Icon einer Windows Forms Anwendung kann man ganz einfach über die Eigenschaft Icon ändern.

      Viele Grüße
      Oliver

      Löschen
  2. Hallo Oliver!

    Vielen Dank für den Link, das hatte ich übersehen. : / Mit Icon meine ich aber, dass die Dateiendung nicht das Icon der Anwendung, sonder ein eigenes bekommen soll. Kann man nicht so wie das Standardprogramm auch ein Icon festlegen?

    Viele Grüße
    Bene

    AntwortenLöschen
    Antworten
    1. Hallo,
      die Icons von Dateiendungen werden in der Registry festgelegt, hier gibt's einen interessanten Artikel dazu:
      http://www.harmageddon.broesel.org/anleitungen/42-standard-icons-unter-windows-7-aendern.html
      Z.B. unter HKEY_CLASSES_ROOT\txtfile\DefaultIcon ist dann der Pfad zum Icon gespeichert. Diesen Schlüssel kannst du für deine Endung bearbeiten. Falls du mit der Registry noch nichts gemacht hast, ich habe hier auch einen Artikel dazu geschrieben: http://csharp-tricks.blogspot.de/2010/08/registry-tutorial.html
      Grüße, hoffe das hilft.

      Löschen
  3. Vielen Dank, ich habe inzwischen auch einen Weg gefunden, wie man in der Registry auch ohne Admin-Rechte arbeiten kann. Wenn man den Schlüssel HKEY_CURRENT_USER benutzt, dann bearbeitet man die Einstellungen des aktuellen Benutzers, und dafür braucht man dann keine Rechte.
    Danke für die Tipps!
    Bene

    AntwortenLöschen