创建交互式登录会话 windows 7

Posted

技术标签:

【中文标题】创建交互式登录会话 windows 7【英文标题】:Create an interactive logon session windows 7 【发布时间】:2013-12-17 15:08:40 【问题描述】:

我需要为用户创建交互式登录会话并在此会话中为此用户帐户启动应用程序。 我不需要它在任何时候成为活动会话。我所需要的只是在后台运行额外的会话,其中包含一个应用程序。

不幸的是,LogonUser 不是我的解决方案,因为它不会创建自己的会话。

有没有办法在 C#/PInvoke 或 powershell 中做到这一点?

编辑:

关于我要达到的目标的更多详细信息: 我知道这不是一个优雅的解决方案,但如果我可以自动化这将是一个“解决方案”。

我有第 3 方应用程序,我想在一个桌面上运行多次。我尝试过右移单击“以用户身份运行”,但出现错误无法访问“C:\Users\Default\AppData”。 PInvoke Logonuser 因访问被拒绝异常而失败。 如果我切换到另一个用户而不是多个实例运行没有任何问题。

类似于 XP 的解决方案: Create an interactive logon session

【问题讨论】:

这听起来像是XY Problem,你在做什么,创建一个新的交互式登录会话是解决方案? 我有第 3 方应用程序,我想在一个桌面上运行多次。我尝试过右移单击“以用户身份运行”,但出现错误无法访问“C:\Users\Default\AppData”。 PInvoke Logonuser 因访问被拒绝异常而失败。如果我切换到另一个用户而不是多个实例运行没有任何问题。 我建议您考虑使用Application Compatibility Toolkit,您可以使用shim 将调用AppData 重定向到其他位置。 【参考方案1】:

我需要为用户创建交互式登录会话并在此会话中为此用户帐户启动应用程序。

据我了解,您无法以编程方式创建新会话。您有权创建新桌面,但不能创建新会话。

【讨论】:

新桌面和新Session有什么区别。我可以使用新桌面以用户身份运行应用程序吗? 有会话、窗口站和桌面。这可能有点令人困惑。您可以做的是创建一个新桌面,而不是激活它。我不知道这是否会解决您的实际问题。我刚刚尝试回答您提出的问题。 问题再次困扰着我。你确定不可能吗? logmein 和其他应用程序如何将您登录到远程计算机? 他们使用远程桌面/终端服务 API、WTSxxx API 函数。他们不会创建新的会话。【参考方案2】:

我也有类似的问题,我编写了一个应用程序,它使用 TestStack.White 来控制第三个 WPF 应用程序,该应用程序在后台使用 UI 自动化。当我 RPD 进入远程机器并观看应用程序时,它运行完美,但一旦我断开连接甚至最小化 RPD 窗口,我的应用程序就会冻结。我什至尝试过声称能够做到这一点的 AlwaysUp 和 Service+ 等软件,他们甚至可以将应用程序启动到特定会话中。一旦你看到这个弹出窗口,它说应用程序想要向你发送消息,除非你查看消息,否则应用程序将不会运行。我确实发现使用 TightVNC 的工作很糟糕。我在远程机器上安装了服务器,在我的机器上连接了查看器,然后启动了应用程序,即使我断开查看器,它仍然运行。 TightVNC 刚刚创建了一个 C# api,我正在等待他们发​​送,我真的希望我可以务实地连接查看器会话并启动/重新启动应用程序。我知道这与您尝试做的有点不同,这是一篇旧帖子,但我想我会分享。

【讨论】:

以上是关于创建交互式登录会话 windows 7的主要内容,如果未能解决你的问题,请参考以下文章

Apache Livy 0.7.0 无法创建交互式会话

如何知道Windows服务是否有活动的交互式会话?

如何在Windows登录后创建交互式表单

从 shell 脚本生成交互式 telnet 会话

为每个进程、用户或会话获取非交互式用户的 Window Station?

映射要由服务使用的网络驱动器