Website-Icon Digital Native

C# – Programm automatisch mit Administratorrechten neu starten

C Sourcecode

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

Die mobile Version verlassen