Search code examples
c#windows-7windows-vistauac

Windows 7 and Vista UAC - Programmatically requesting elevation in C#


I have a program that only requires elevation to Admin on very rare occasions so I do not want to set-up my manifest to require permanent elevation.

How can I Programmatically request elevation only when I need it?

I am using C#


Solution

  • WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    bool hasAdministrativeRight = principal.IsInRole(WindowsBuiltInRole.Administrator);
    
    if (!hasAdministrativeRight)
    {
        RunElevated(Application.ExecutablePath);
        this.Close();
        Application.Exit();
    }
    
    private static bool RunElevated(string fileName)
    {
        //MessageBox.Show("Run: " + 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;
    }