如何从 Windows 上的服务在未登录用户的桌面上启动应用程序
How to launch application on non-logged on user's desktop from service on Windows
我正在尝试创建一项服务,该服务确实以下是:
- 使用指定用户名/密码的用户登录
- 在登录的桌面上运行一个应用程序,以步骤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在评论中的详细说明。
相关文章:
- 如何在 c++ 中将密码和用户名保存到 .txt 文件中.如果用户尝试登录,我仍然希望能够检索它们
- Win7 C++ - 从以用户身份登录的服务启动可执行文件的问题
- 用户注销/登录后,创建托盘图标时出现罕见错误
- 是否有任何 C 函数或 API 来获取当前登录用户下运行的进程列表
- 如何从 Windows 上的服务在未登录用户的桌面上启动应用程序
- 获取 Windows 系统已加入 Azure AD 时登录用户的 UserPrincipalName
- 加密用户数据,而不会丢失安卓应用程序中的登录用户
- 如何检查用户登录到Windows的时间
- 嗨,我正在尝试编码一个允许用户在Visual C 中登录的按钮,程序正在运行,但表单对话框未显示
- 如何从非管理员用户获取当前登录的用户名、域名和用户 sid
- 我如何将登录的用户登录到当前会话中的域用户
- 从 mfc 应用程序点击网络服务,并希望从网络服务登录方法读取用户代码返回
- 如何从另一个登录用户启动登录用户内部的应用程序
- 在多个登录用户系统中检索当前登录的用户 SID
- 如何获取当前登录用户的UPN(用户主体名称)
- 登录用户:程序意外完成
- 是否可以创建一个服务或应用程序,以编程方式在windows中登录用户
- 如何在Windows中获得当前登录用户的域
- 如何在 Windows 中获取登录用户的 SID
- 如果使用system用户令牌启动登录用户进程,是否会危及系统安全