首页 > 解决方案 > 没有管理员权限在具有管理员权限的登录用户上下文中启动桌面应用程序

问题描述

我想运行仅安装在 Program Files 和 Program File (x86) 文件夹中的本地桌面应用程序,该应用程序应以登录用户上下文的管理员权限运行。我用谷歌搜索并了解了一些。

根据我的想法需要:-

  1. 带有 Socket 客户端的文件资源管理器 GUI
  2. 一项服务
  3. 使用 Socket 服务器启动本地应用程序的可执行文件(控制台应用程序)

注意:文件资源管理器之间的通信将使用套接字客户端和服务器进行。该服务将在系统上下文中启动本地应用程序服务器。

假设安装了文件资源管理器、服务和应用程序启动服务器。使用文件资源管理器将选择应用程序并将选定的应用程序信息发送到服务器。服务器将检查请求的路径是否来自受信任的路径。

如果它来自受信任的路径,服务器将从“winlogon.exe”获取句柄并获取访问令牌的句柄,然后复制访问令牌并调整其权限(默认系统权限将在那里,我不想要那个因为系统将拥有完全权限)然后使用 CreateProcessAsUser 启动应用程序。

启动后,将 UI 置于前台。该应用程序需要在具有管理员权限的用户上下文中运行。

我的问题如下:-

  1. 为了实现这一点,我需要在服务中启用交互过程吗?
  2. 如果需要交互,则用户和本地服务器之间的通信是使用套接字进行的,并且用户不直接与服务交互,只是想知道我是否遵循以下文档中所述的 Microsoft 安全措施,还是违反了它? https://docs.microsoft.com/en-us/windows/win32/services/interactive-services
  3. 我们有没有其他方法可以在没有实际管理员权限的情况下在登录用户上下文中启动具有管理员权限的应用程序?

目标操作系统是 Windows 10 1803 和 1809。

标签: c#.netsecuritywinapiuac

解决方案


查看工具psexecpaexec(它们大多相同,主要区别在于后者是开源的)。

这些工具允许您以另一个用户和/或在另一台计算机上启动一个进程。这也应该在服务中起作用。


推荐阅读