Giving application elevated UAC

Viewed 45972

I have an application which needs the UAC elevation.

I have the code which lets me give that but the application opens twice and that's an issue.

Here's the code of Form1:

public Form1()
{
    InitializeComponent();

    WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);           

    if (!hasAdministrativeRight)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.UseShellExecute = true;
        startInfo.WorkingDirectory = Environment.CurrentDirectory;
        startInfo.FileName = Application.ExecutablePath;
        startInfo.Verb = "runas";
        
        try
        {
            Process p = Process.Start(startInfo);
        }
        catch (System.ComponentModel.Win32Exception ex)
        {
            return;
        }
    }
}

Here's the code of programs.cs:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

By debugging I found out that first it executes

Process p = Process.Start(startInfo);

which opens the application UAC elevation dialog and then opens the application

but then it goes to the

Application.Run(new Form1());

in main() and opens the application again.

I don't want it to open the app again.

I am new to this so I am asking is there anything I am doing wrong and do I need to close the UAC once its open?

4 Answers
Related