C# – Programm automatisch mit Administratorrechten neu starten

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 😉 )

Kolja Engelmann

Technikfan, Freizeitprogrammierer, selbsternannter Toolking und vermutlich größter Drachenfan Deutschlands blogged hier die Lösungen zu IT-Problemen die ihm über den Weg laufen, kleine Softwaretools, nostalgische Anfälle und missbraucht das Ganze gern auch mal als privates Tagebuch und Fotoalbum.

Das könnte dich auch interessieren …

5 Antworten

  1. Matthias sagt:

    Als Alternative: Man könnte auch ein app.manifest im Visual Studio anlegen, so dass die Anwendung sich nur mit Administratorrechten starten lässt. Erspart die Neustarterei und durch die UAC bekommt die Anwendung unter Vista und 7 auch gleich das entsprechende kleine Zusatz-Icon – man sieht also direkt, dass Adminrechte benötigt werden. Beim Starten kommt dann der Elevation-Dialog (falls die UAC nicht deaktiviert wurde).

    Und ich finde die Zeile 2 im obigen Beispiel überflüssig, da Du den Variablenwert in der Condition gar nicht verwendest. Die Vergleiche auf „== true“ usw. sind Geschmacksache 🙂

    Liebe Grüße,
    Matthias

  2. Alles klar mein Diggi. Jetzt see ich auch mal scharp. Yolo #C# forlifediggis

Schreibe einen Kommentar

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