From an application that is not being run as administrator, I have the following code:
ProcessStartInfo proc = new ProcessStartInfo(); proc.WindowStyle = ProcessWindowStyle.Normal; proc.FileName = myExePath; proc.CreateNoWindow = false; proc.UseShellExecute = false; proc.Verb = "runas";
When I call Process.Start(proc), I do not get a pop up asking for permission to run as administrator, and the exe is not run as administrator.
I tried adding an app.manifest to the executable found at myExePath, and updated the requestedExecutionLevel to
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
With the updated app.manifest, on the Process.Start(proc) call, I get an exception, "The requested operation requires elevation."
Why isn't the .Verb action not setting administrator privileges?
I am testing on Windows Server 2008 R2 Standard.
To do this, search for netplwiz in the taskbar search box and open the result. After that, select your user account and click the Properties button. Next, go to Group Membership tab > select Administrator > click Apply and OK buttons to save the change.
Again, right-click on the app's name. Click on Properties and select the Shortcut tab. Select Advanced. Finally, mark the checkbox next to Run as administrator.
You must use ShellExecute
. ShellExecute is the only API that knows how to launch Consent.exe
in order to elevate.
In C#, the way you call ShellExecute
is to use Process.Start
along with UseShellExecute = true
:
private void button1_Click(object sender, EventArgs e) { //Public domain; no attribution required. ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe"); info.UseShellExecute = true; info.Verb = "runas"; Process.Start(info); }
If you want to be a good developer, you can catch when the user clicked No:
private void button1_Click(object sender, EventArgs e) { //Public domain; no attribution required. const int ERROR_CANCELLED = 1223; //The operation was canceled by the user. ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe"); info.UseShellExecute = true; info.Verb = "runas"; try { Process.Start(info); } catch (Win32Exception ex) { if (ex.NativeErrorCode == ERROR_CANCELLED) MessageBox.Show("Why you no select Yes?"); else throw; } }
CreateProcess
cannot do elevation, only create a process. ShellExecute
is the one who knows how to launch Consent.exe, and Consent.exe is the one who checks group policy options.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With