如何从 Windows 上的服务在未登录用户的桌面上启动应用程序

How to launch application on non-logged on user's desktop from service on Windows

本文关键字:登录 用户 桌面 应用程序 启动 服务 Windows      更新时间:2023-10-16

我正在尝试创建一项服务,该服务确实以下是:

  1. 使用指定用户名/密码的用户登录
  2. 在登录的桌面上运行一个应用程序,以步骤1的用户

注意:步骤1之前,用户未登录。(重新启动机器后立即进行(

预期的结果是,如果用户登录到台式机,则用户帐户在步骤

上登录,用户应该能够在第2步中查看启动应用程序的UI。

我找到了这篇文章,但是该代码将在当前桌面上启动该应用程序(例如,当前登录为USERA。使用UserB的用户名/密码,该应用程序仍在USERA桌面上启动,但使用Userb的帐户(。

https://support.microsoft.com/en-ca/help/165194/createprocessasuser-windowstations-and-desktops


请让我知道实现目标的正确方法是什么。

IDE:Windows上的Visual Studio 2015 C 。

让我回答我的问题。

最重要的是:

  • 我无法通过编程登录。

原因:

  • 调用某些功能,例如登录器,我可以登录并访问与用户帐户相关的资源。
  • 但是,登录会话与用户从登录屏幕上登录时将创建的会话不同。
  • 由于安全原因,一旦启动了一个过程,我们就无法将过程移至另一个会话。因此,用户从登录屏幕上登录后,UI将永远无法在桌面上显示。

替代解决方案:

  • 使用auto-logon
  • 重新设计应用程序,并拆分UI及其数据。因此,具有数据的过程可以作为服务运行,UI可以稍后在台式机上启动。

Windows会话,窗口站和桌面的工作方式的详细信息说明:https://brianbondy.com/blog/100/understanding-windows-at-a-a-deeper-level-sessions-window-stations-and-desktops

非常感谢Harry Johnston在评论中的详细说明。

相关文章: