.NET
.NET Administratorrechte fuer eigenes Programm einfordern
Posted on .Wenn man mit .NET entwickelt wird man schnell feststellen, dass man zur Laufzeit bestimmte Ordner nicht öffnen kann, bestimmte Dateien nicht löschen oderbestimmte Systemfunktionen nicht ausführen kann!
Das liegt daran, dass dem Programm die nötigen Rechte fehlen, denn seit Windows Vista werden alle Programme ohne Administratorrechte ausgeführt. Braucht ein Programm dann aber doch diese Rechte sieht man diesen wenig gemochten Dialog von Windows:
Bild 1: Windows Benutzerkontensteuerung in Aktion
Das Angezeigte unterscheidet sich dann natürlich je nach Programm, aber sobald man hier auf Zulassen geklickt hat wird das Programm mit den Vollen Rechten gestartet.
Aber woran kann ich erkennen, dass ich volle Rechte benötige? – Ganz einfach, wenn man Fehlermeldungen erhält, die besagen, dass man keine Rechte besitzt um auf die Dienste zuzugreifen, oder wenn Systemfunktionen (zB. WMI) nicht mehr korrekt ausgeführt werden.
Wie sorge ich nun dafür, dass mein Programm Adminrechte erhält? – Hier gibt es zwei Möglichkeiten. Die erste ist es das Programm mit rechter Maustaste anzuklicken und dann „Als Administrator ausführen“ zu wählen:
Bild 2: So kann man jedem Programm Administratorrechte geben
Natürlich kann man die Adminrechte direkt in unserem Programm beantragen, in dem man in den Projekteinstellungen im Tab „Anwendung“ auf den Button „Einstellungen für die Benutzerkonstensteuerung anzeigen“ klickt. Dazu wird die Datei „app.manifest“ im Projektordner generiert, die dann folgende Einstellungen beinhaltet:
<!-- UAC-Manifestoptionen Wenn Sie die Ebene der Benutzerkontensteuerung für Windows ändern möchten, ersetzen Sie den Knoten "requestedExecutionLevel" wie folgt: <requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> Wenn Sie aus Gründen der Abwärtskompatibilität Datei- und Registrierungsvirtualisierung verwenden möchten, löschen Sie den Knoten "requestedExecutionLevel". -->Wie man in dem Grünen Kommentarblock erkennen kann, gibt es drei verschiedene Einstellungsmöglichkeiten, nämlich level=“asInvoker“ (welcher voreingestellt ist), level=“requireAdministrator“ und level=“highestAvailable“.
requestedExecutionLevel level="requireAdministrator" uiAccess="false"Wenn man nun den unter dem Kommentarblock stehenden Eintrag requestedExecutionLevel auf requireAdministrator ändert, wird unser Programm bei jedem Start automatisch Administratorrechte einfordern, und man wird bei jedem Start diesen unschönen Windows Dialog aus Bild 1 zu sehen bekommen.
Wie ihr euch sicher grade denkt ist das sehr unangenehm für den Benutzer, der später mit der Software arbeiten muss. Dieser muss jedes Mal die Ausführung dieses Programms bestätigen. Außerdem sollte man im Hinterkopf behalten, dass Microsoft diesen Dialog nicht zum Spaß eingeführt hat.
So sollte man immer versuchen seine Software so zu gestalten, dass man auch ohne Administratorreche auskommt. Sollte es aber nicht anders gehen, sollte man den Teil, der diese Rechte benötigt stets aus dem Programm auslagern, sodass dieser Spezielle Fall dann gesondert aufgerufen werden kann und man den Benutzer ggf darauf vorbereiten kann, dass gleich eine Meldung von Windows kommt.
Das Hauptprogramm kann und sollte dann auch weiterhin mit dem geminderten Rechten laufen. So verwirrt man den Benutzer nicht und kann Fehlerquellen später besser eingrenzen.
Sebastian Gross
http://www.bigbasti.comSebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.
Author bigbasti87
Posted at 13:46 25. Dezember 2009.
Bloggd: .NET Administratorrechte für eigenes Programm einfordern – http://blog.bigbasti.com/net-administrat… #dotnet #uac