我正在为我的应用程序开发一个自定义安装程序,因为我需要配置一些InnoSetup和其他类似工具不允许的特殊设置。安装程序需要管理员权限才能执行必要的配置。安装结束时,它会启动新安装的应用程序。
问题是这个应用程序也是以管理员权限启动的,继承了安装程序的权限。无论使用何种方法启动应用程序,都会发生这种情况:
CreateProcess
、CreateProcessAsUser
、ShellExecute
,甚至是过时的 WinExec
。
总而言之,我的问题是:从以管理员权限运行的应用程序中,如何使用已登录 Windows 用户的“正常”权限启动另一个应用程序?
Raymond Chen 有关于这个主题的博客文章:
IShellDispatch2.ShellExecute()
. 要求用户的 Explorer 实例运行应用程序
TLDR;要求
CreateProcess()
使用 PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
属性使用户的 Explorer 实例成为应用程序的父级。