我正在编写一个应用程序,它包含以用户权限运行的GUI部分和以本地系统权限作为服务运行的服务器部分。 GUI部件有时需要执行一些需要高权限的操作(管理员/本地系统)。 GUI应用程序可以请求服务执行此操作,服务可以执行此操作(当然,在身份验证和授权之后)。
但是,如果服务可以运行具有本地系统特权的命令,这将在用户桌面的上下文中运行(以便用户可以与命令的GUI交互),这将更方便。有可能吗?
.NET中的解决方案更受欢迎,但C / C ++也很好。
答案 0 :(得分:0)
有四种方法可以从非提升的GUI流程中运行提升的代码:
将提升的逻辑移动到一个单独的.exe文件中,该文件有自己的清单以要求提升。然后,GUI应用程序可以使用CreateProcess()
在需要时运行它。
让GUI应用程序使用ShellExecute/Ex()
动词或第三方CreateProcessElevated()
使用"runas"
来启动新的提升过程。您可以使用不同的.exe文件,也可以使用具有不同命令行参数的相同.exe文件,这没关系。
将提升的逻辑移动到自己的COM对象中,然后GUI应用程序可以在需要时使用COM Elevation Moniker来实例化该对象。
让GUI应用程序与服务进行通信,然后可以使用CreateProcessAsUser()
在用户会话中运行新进程(单独的.exe或具有不同命令行的.same exe)参数,没关系)。使用WTSQueryUserToken()
检索用户的令牌,并在STARTUPINFO
结构中指定用户的桌面。