CreateProcess to run as administrator

2020-03-26 11:46发布

In my Win32 application I have the ability to run child processes with redirected input and output to anonymous pipes that I create and manage - this all works with the CreateProcess() function. However on Win7 (and presumably Vista) if that process is required to be run as administrator then this fails. So what I am looking for is a way to do the equivalent of the "run as administrator" command in explorer that will bring up the standard UAC prompt and then create the process with the elevated permissions. I have seen articles that talk about using the "runas" option to ShellExecute to do this, but then as I see it I don't have the control I need to redirect std input and output to my pipes. Any suggestions?

2楼-- · 2020-03-26 11:59

If you put a manifest on the child app, and if you use ShellExecute to launch, it will use the manifest and there will be a UAC prompt. (I prefer this to the "runas" approach in most cases.) This may allow you to launch the app the way you like without worrying about UAC, and get the elevating from the manifest.

However, you may have issues if the "manage" part you refer to involves a lower privilege app communicating to an elevated one. UAC forbids that.

3楼-- · 2020-03-26 12:19

It should be possible to set the environment variable __COMPAT_LAYER to RunAsAdmin before the CreateProcess call which tells windows to just force the run as admin via the compatibility flags. The environment variable can be deleted once the process is started.

登录 后发表回答