Da ich es gerade mal wieder brauchte: Wie erreicht man, dass sich ein Programm selbst mit Administratorrechten neu startet?
Dazu zunächst eine kleine Abfrage, ob man bereits über entsprechende Berechtigungen verfügt (Zeile 1-2)
Dann setzt man den Pfad zur eigenen ausführbaren Datei zusammen (Zeile 5) //Hierfür gibt’s wahrscheinlich 100 verschiedene Möglichkeiten
Dann startet man sich selbst mit Adminrechten neu (Zeile 8)
Und beendet abschließend das bereits laufende Programm (Zeile 11)
WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
if (principal.IsInRole(WindowsBuiltInRole.Administrator) == false)
{
//Get the full qualified path to the own executable
string x = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
//Start itself with adminrights
if (RunElevated(x) == true)
{
//Close old programwindow
this.Close();
}
}
Der eigentlich Start mit Adminrechten ist dann (abgesehen vom UAC Fenster) ziemlich unspektakulär:
/// <summary>
/// Run a program with elevated rights
/// </summary>
/// <param name="fileName">Path to the executable to run</param>
/// <returns>True if no error has occurred</returns>
private static bool RunElevated(string fileName)
{
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.Verb = "runas";
processInfo.FileName = fileName;
try
{
Process.Start(processInfo);
return true;
}
catch (Win32Exception)
{
//Do nothing. Probably the user canceled the UAC window
}
return false;
}
Done;
Gibts noch bessere Möglichkeiten? Ich bin für alles offen (und schiele mal so Richtung Sven, der es sich zum Hobby gemacht hat mich zu korrigieren 😉 )

