seeseekey.net - Invictus Deus Ex Machina

Eine gewöhnliche .NET Anwendung benötigt keine Administratorrechte und bekommt diese meist auch nicht. Doch was wenn man doch mal solche Rechte benötigt um z.B. die Zuordnungen zu einem Dateiformat in der Registry vornehmen zu können? Unter XP ist dies kein Problem da der Nutzer dort meist mit Administratorrechten unterwegs ist. Unter Windows Vista und höher muss man diese Rechte allerdings anfordern.

Leider ist es nicht möglich, sich diese Rechte nur für eine bestimmte Funktion anzufordern. Entweder man holt sie sich die Rechte (per Manifest Datei) für die ganze Anwendung oder gar nicht. Bei der Anforderung der Rechte für die ganze Anwendung wird man von Windows jedesmal gefragt ob man die entsprechende Anwendung mit Administratorrechten starten möchte, was natürlich unschön ist.

Eine weitere Möglichkeit ist es für die Fälle welche administrative Rechte benötigen eine extra Anwendung zu schreiben, welche dann z.B. die Dateierweiterungen registriert. Der Vorteil dieser Variante ist es, das man nur nach den entsprechenden Rechten gefragt wird, wenn es nötig ist. Diese Variante kann man nun auch ausbauen, indem man keine Fremdanwendung aufruft, sondern sich selber mit ein paar Kommandozeilenparametern:

ProcessStartInfo processInfo=new ProcessStartInfo();
processInfo.Verb="runas";
processInfo.FileName=FileSystem.ApplicationPathWithFilename;
processInfo.Arguments="-reg:.bat;.xml";
Process.Start(processInfo);

In der Program.cs wertet man diese Argumente dann in der

static void Main(string[] args)

aus und führt die entsprechende Aktion aus. Danach beendet man die Anwendung gleich wieder. Somit kann man die Teile welche solche Rechte benötigen in der eigenen Anwendung “auslagern”.

Weitere Informationen gibt es unter:
http://www.vbarchiv.net/workshop/workshop_115.html
http://victorhurdugaci.com/using-uac-with-c-part-1/
http://victorhurdugaci.com/using-uac-with-c-part-2/
http://victorhurdugaci.com/using-uac-with-c-part-3/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.