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?
You don't need to meddle with all that to make sure that your application always runs with elevated privileges. You can simply add an application manifest which instructs Windows to run your app elevated, and the UAC prompt will appear without you needing to write a single line of code.
There's a related question with an answer that also describes how to add a manifest here: How can I embed an application manifest into an application using VS2008?