Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Restart program unelevated

For some reason, my C# program needs to restart with elevated privileges. I use the following code to achieve it:

private static void RestartForPermissionsFix()
{
    ProcessStartInfo processInfo = new ProcessStartInfo();
    processInfo.Verb = "runas";
    processInfo.FileName = Assembly.GetExecutingAssembly().Location;

    Process.Start(processInfo);
}

This works great.

After I "fix my privileges", I want to restart the program unelevated. I tried the same as above without the "runas", but it does not work. I assume the process being started from an elevated process automatically gets elevated. Any idea?

like image 268
coffee_machine Avatar asked Jul 18 '11 15:07

coffee_machine


2 Answers

In order to launch a process at medium integrity from a high integrity process, I believe you would have to get the current process token using OpenProcessToken, duplicate it, remove the high integrity SID from the token using SetTokenInformation, and then use that token to create the new process using CreateProcessAsUser. This would be similar to this example, except rather than add the low integrity SID you'd have to remove the high integrity one. Note: I haven't tested this, so I'm not 100% sure it would work.

I suggest you leave the original unelevated process running, and have it wait for its elevated counterpart to finish (e.g. using Process.WaitForExit). Once that finishes, it can continue unelevated as before. This would be a lot easier and more foolproof.

like image 180
Sven Avatar answered Sep 27 '22 16:09

Sven


I had the same problem with an application that I wanted to update automatically (The update program requires elevated privileges).

What I did was creating an external .exe that would start my updater program with elevated privileges, wait for it to exit, then restart my application with normal privileges.

I then embedded this .exe in my main application, and start this .exe just before leaving my application when I update it.

like image 33
Otiel Avatar answered Sep 27 '22 16:09

Otiel