通常从提升的过程执行一个过程

时间:2010-02-09 13:35:51

标签: windows winapi uac

是否有某种方法可以从升高的方式以非提升的方式启动进程。我的设置已升级,当它完成时,它将启动主应用程序。由于设置升高,主要过程也会升高,这是不可取的。什么是最好的解决方案?

3 个答案:

答案 0 :(得分:2)

这是一个问题,Vista / Win7似乎没有API来获取您需要调用CreateProcessAsUser()的非特权用户令牌。我发现的唯一解决方案涉及使用任务调度程序启动程序。这并没有让我觉得非常实际。

一个易于理解的解决方案是使用一个小的非高架帮助程序。它可以反过来启动提升的设置过程并等待来自那个的确认以启动非提升的设置过程。握手非常简单,只需使用命名的互斥锁即可。

答案 1 :(得分:0)

没有黑客攻击的唯一方法是拥有两个进程(可以在同一个.exe中实现)

实例A使用ShellExecute和runas谓词启动实例B. B进行安装,当它在“完成页面”上启动你的应用程序时,它使用某种形式的进程间通信(RPC,共享内存+事件等)与A告诉它代表它启动进程。

答案 2 :(得分:0)

这似乎是一种很好的方法,只要你不关心Shell没有运行的情况(例如,可能是一些终端服务应用程序设置,可能,虽然我不确定):

http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you-part-2-how/

它获取Explorer.exe的接口,该接口应该在用户的正常上下文中运行,并要求Explorer代表它执行命令。这只需使用简单的文档化COM接口即可完成,无需处理进程令牌或代码/ DLL注入。