Home > Programmieren > .NET – Administratorrechte unter Windows Vista erzwingen

.NET – Administratorrechte unter Windows Vista erzwingen

20. August 2007

Die neue Benutzerkontensteuerung UAC von Windows Vista kann eigene Programme die Administratorrechte benötigen Probleme bereiten. Auch wenn der User Administratorrechte besitzt werden ihm diese beim Anmelden sofort wieder entzogen.

Dadurch hat man zwei Möglichkeiten: Entweder man zwingt den Benutzer dazu das Programm mit dem Kontextmenüeintrag "Als Administrator ausführen" zu starten, oder man zwingt Windows Vista zur Herausgabe der Administratorrechte. Den zweiten Weg sollte man auf jeden Fall vorziehen. Dadurch wird Windows Vista dazu aufgefordet den Benutzer zu fragen ob er das Programm als Administrator ausführen möchte.

Dazu benötigt man eine Manifest-Datei. Leider reicht es nicht, das XML-Manifest wie üblich separat zur EXE-Datei mitzuliefern. Das .NET-Assembly muss nach dem Kompilieren mit dem Programm Microsoft Manifest Tool (mt.exe) des .NET-Framework SDK noch nachträglich modifiziert werden.

Erst sollte man allerdings eine extra Datei erstellen, (zB MeineExeDatei.exe.manifest) in welcher die notwendigen XML-Daten des Manifests enthalten sind:

< ?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 
  <assemblyidentity version="1.0.0.0" processorArchitecture="X86" name="NAME-DER-EXE-DATEI" type="win32" />
 
  <description>elevate execution level</description>
 
  <trustinfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedprivileges>
        <requestedexecutionlevel level="requireAdministrator" uiAccess="false" />
      </requestedprivileges>
    </security>
  </trustinfo>
 
</assembly>

Ich habe versucht direkt von Visual Studio das Manifest in die EXE-Datei integrieren zu lassen. Allerdings hat keine der üblichen Methoden geholfen, also kommt man um dein Aufruf der mt.exe nicht herum. 🙁

Die folgende Befehlszeile sollte nicht in der Windows Eingabeaufforderung sondern in der Visual Studio Eingabeaufforderung ausgeführt werden, da dort die %PATH%-Variable auch die Anwendungen des .NET-Framework-SDK einschließt:

mt.exe -manifest Manifestdatei –outputresource:EXEDatei

Besser ist es natürlich, wenn man das Ganze automatisiert und sich den ständigen Aufruf dadurch erspart. Dazu öffnet man zB im Visual Studio einfach die Projekteigenschaften und wählt dort den Register Buildereignisse. Als nächsten Schritt trägt man einfach folgenden Aufruf in die Textbox "Befehlszeile für Postbuildereignisse:" ein:

 
echo.Generiere Manifestinformationen
"$(DevEnvDir)..\\..\\SDK\\v2.0\\bin\\mt.exe" -manifest "$(ProjectDir)$(TargetFileName).manifest" –outputresource:"$(TargetDir)$(TargetFileName)"

Ob es übrigends geklappt hat, sieht man wenn man die Datei auf einen Vista-Rechner kopiert. Das Programmsymbol der EXE-Datei erhält automatisch ein Overlay mit einem Schild in den Farben des Windows-Logos. Ein Doppelklick darauf öffnet dann das Auswahlfenster, dass zur Anmeldung als Administrator auffordert.

Hoffen wir nur noch, dass Microsoft diese Möglichkeit direkt in das Visual Studio einbaut, oder zumindest anstĂ€ndig dokumentiert. Bis dorthin muss man sich halt mit dieser Methode aushelfen. 😉

  1. Bisher keine Kommentare
Kommentare sind geschlossen