0

我正在编写一个应用程序,它将由以用户权限运行的 GUI 部分和以本地系统权限作为服务运行的服务器部分组成。GUI 部分有时需要执行一些需要高权限的操作(管理员/本地系统)。GUI 应用程序可以请求服务执行此操作,并且服务可以执行此操作(当然是在身份验证和授权之后)。

但是,如果该服务可以运行具有本地系统权限的命令,该命令将在用户桌面的上下文中运行(以便用户可以与命令的 GUI 交互),则会更方便。是否可以?

.NET 中的解决方案更可取,但 C/C++ 也很好。

4

1 回答 1

0

有四种方法可以从非提升的 GUI 进程运行提升的代码:

  1. 将提升的逻辑移动到一个单独的 .exe 文件中,该文件有自己的清单以要求提升。GUI 应用程序可以CreateProcess()在需要时用于运行它。

  2. 让 GUI 应用程序ShellExecute/Ex()"runas"动词或第三方一起使用CreateProcessElevated(),以启动新的提升进程。您可以使用不同的 .exe 文件,也可以使用具有不同命令行参数的相同 .exe 文件,没关系。

  3. 将提升的逻辑移动到它自己的 COM 对象中,然后 GUI 应用程序可以在需要时使用COM Elevation Moniker实例化该对象。

  4. 让 GUI 应用程序与服务通信,然后可以使用该服务CreateProcessAsUser()在用户会话中运行新进程(单独的 .exe 或具有不同命令行参数的 .same exe,没关系)。使用 检索用户的令牌,并在结构WTSQueryUserToken()中指定用户的桌面。STARTUPINFO

于 2013-09-04T20:21:00.980 回答