问题标签 [session-0-isolation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1441 浏览

c# - 从服务启动新用户会话

我有以下问题:

从服务中,我需要在用户会话中启动应用程序。没有人类用户登录那台机器,因为它是一台服务器。启动的应用程序必须有一个会话!= 0。

当前的“解决方案”

我在机器启动时使用了计划任务,该任务启动(当然是在会话 0 中)在同一台机器上启动远程桌面登录的应用程序:这会创建一个用户会话 > 0,并且在用户启动时,这是最终的应用程序发射。它有效,但太棘手了。

有什么最聪明的方法吗?由于可能没有用户登录,因此我可以重用已经打开的用户会话至关重要。

重大更新

经过大量研究和部分成功,并且由于系统管理员在为特定目标创建用户方面的一些不灵活,我决定使用OpenGL而不是 WPF 来渲染会话 0 中损坏的 3d 部分。令人惊讶的是,它花费的时间少于预期. 我认为将这个问题作为参考可能对其他想要尝试从服务呈现Viewport3D的人有用。

0 投票
1 回答
3561 浏览

c# - 在 Windows 7 中使用 Windows 服务截屏

我知道这是一个关于 Win 7 中带有 c# 上的 winService 的屏幕截图的老问题。我已经阅读了关于 Stack Overflow 的所有文章以及 CodeProject 上的很多文章......我知道服务的 0 会话,从 Win Vista 开始以及关于允许服务与桌面检查交互......但我被卡住了(我可以'不要从服务中截取屏幕截图,因为我不知道显示图像(屏幕)保存在哪里。

这是 MyTimer 类:

并且此代码返回盲(空)屏幕截图...一切正常,但服务无法获取屏幕截图,因为它处于 0 会话中...如何从当前登录用户的会话中获取 gui?

0 投票
1 回答
2064 浏览

c# - 如何唯一标识会话 0 中运行的 Internet Explorer 窗口?

我正在创建WCF web services那个automata internet explorer。有多个 Web 服务调用需要访问Internet Explorer. 但是,由于WCF服务托管在IIS所有对 Web 服务的调用都在会话 0 中执行。现在要访问同一个实例,Internet Explorer我使用SHDocVw.InternetExplorer.HWND返回实例的窗口句柄的属性Internet Explorer。在下面的代码中,当在窗口句柄上作为WCF服务执行时,IIS 7由于会话 0 隔离,总是返回 0。此外,我无法重新连接到同一个IE实例或循环浏览所有打开的IE窗口。我可以枚举进程列表并查找在会话 0 中打开的每个IE窗口的进程 ID,但不能强制System.Diagnostics.Process转换为SHDocVw.InternetExplorer对象。

下面是我的代码:

任何帮助都感激不尽。

0 投票
1 回答
1179 浏览

windows - 来自会话 0 的带有 putty 的 ssh 给出“服务器主机密钥不匹配...”警报

我有一些从 TeamCity 运行的测试代码。我的部分测试代码需要 ssh 和 putty。此代码在命令提示符(会话 1)中运行良好,但是当我从 TeamCity(这是一个进程,因此在会话 0 中运行)运行它时,我在测试日志中收到以下警报

服务器主机密钥与 PuTTY 缓存在注册表中的一个不匹配 [snip] 如果您信任此主机,请输入“y”将密钥添加到 PuTTY 的缓存并继续连接。如果您只想进行一次连接,而不将密钥添加到缓存中,请输入“n”。如果您不信任此主机,请按 Return 放弃连接。将密钥存储在缓存中?(是/否)

由于这是在会话 0 中,我无法交互并点击“y”。我无法弄清楚为什么当我从会话 1 第一次运行时点击“y”时存储在注册表中的密钥不会停止出现在会话 0 中的警报。

谁能帮我?谢谢。

0 投票
1 回答
526 浏览

session-0-isolation - 会话 0 上的 UI 自动化

我正在尝试使用 UIA 来自动化应用程序。在测试阶段,我使用 psexec 在远程服务器上运行应用程序并在会话 0 中启动它,因为这是唯一保证可用的会话。

这样做时,在切换到会话 0 桌面(来自交互式服务检测消息)之前,我无法自动化应用程序的某些子项。

我添加了一些使用 TreeWalker 遍历应用程序的整个树的代码,我看到在不可见会话 0 中仅创建一些子项,而在交互式桌面(会话 0 或其他)中创建所有子项。

找不到有关此问题的任何文档。

有什么建议么?

0 投票
1 回答
2153 浏览

c++ - 为什么我不能在 Windows Server 2008 中使用 system() 从服务启动批处理文件?

我有一个在 64 位 Windows Server 2008 机器上作为服务运行的 C++ 程序。该程序尝试使用以下命令启动批处理文件:

在 32 位 Windows Server 2003 中,这工作正常(批处理文件已执行),但在 Windows Server 2008 上,批处理文件未执行,我得到返回值 0xC0000142(我让批处理文件将一些文本写入文件为一个测试,看看它是否执行)。即使我尝试执行不存在的东西,我实际上也会得到相同的返回值。

我在 Windows Server 2008 中阅读了有关 Session 0 隔离的信息,因此我使用 psexec 在 Session 0 中启动命令提示符,作为服务的“登录身份”用户列出的同一域用户:

然后我能够从命令提示符成功执行批处理文件。

列为该服务的登录身份用户的域用户位于管理员组中。此外,如果我手动启动 C++ 应用程序(而不是作为服务),它将启动批处理文件。

那么 Session 0 隔离是否有一些东西使 system() 调用在作为服务运行时不起作用?或者关于行为变化的其他解释?我知道 system() 不一定是最好的方法,但我正在寻找它不再有效的实际原因。

0 投票
1 回答
499 浏览

com - 会话 0 中的进程可以共享进程外 COM 服务器吗?

在 Windows 7 中,我有一个进程外 COM 服务器,例如“MyComServer.exe”。我将其注册为CLSCTX_LOCAL_SERVERREGCLS_MULTIPLEUSE | REGCLS_SUSPENDED

在交互式会话中,会话号 > 0,我的 MyComServer.exe 只运行一个实例,无论有多少客户端正在运行。假设我正在使用我的 COM 服务器运行 5 个 excel、3 个 matlab 和其他 7 个,我只看到 1 个 MyComServer.exe 正在运行。这很好,这就是我想要的。

如果有多个会话处于活动状态,例如会话 1、2 和 3,那么我会看到 3 个 MyComServer.exe 实例。使用任务列表,我可以看到每个实例都在不同的会话中运行。这也很好,正如我所愿。

但是,如果我从会话 0 中使用它,我会看到每个客户端都有一个实例。假设我有 3 个 Windows 服务都在使用它,然后我看到 3 个 MyComServer.exe 实例。使用任务列表,我看到所有 3 个都在会话 0 中运行。会话 0 中的进程可以共享进程外 COM 服务器吗?

调查这个问题我注意到PostMessage会话 0 中的进程之间不起作用。阅读我理解的文档PostMessage不应该跨会话,这意味着会话 0 中的进程无法向会话 1 中的进程发布消息。我注意到,虽然会话 1 中的进程可以向同一会话中的另一个进程发布消息,但会话 0 中的进程不能向任何其他进程发布消息,即使目标也在会话 0 中运行。有人可以确认一下吗?它似乎与 Microsoft 文档不一致。

谢谢。

0 投票
1 回答
6024 浏览

windows - 无法连接到 Windows 2012 r2 上的会话 id 0

我想在 Windows 2012 r2 上连接到会话 ID=0。我有一个被弹出窗口阻止的服务(我猜是 uac/trust 什么的)。所以我需要连接到一个交互式会话 0(如果可能的话)看看是什么阻止了我

当然, mstsc /admin 和 mstsc /console 都可以。'WinStationSwitchToServicesSession' 等都不是。

有什么提示吗?

谢谢

0 投票
1 回答
12702 浏览

c# - 从会话 0 隔离启动过程

在 Windows 8.1 上,我有一个启动 PowerShell 脚本的服务。该服务在会话 0 隔离中作为“nt authority\system”运行。我从 PowerShell 生成的任何进程在会话 0 隔离中作为“nt authority\system”运行。

我需要运行会话 0 之外的用户帐户下的脚本,而不是系统帐户。我试过这个

和 PsExec 使用“-I 1”参数指定我想要的会话。

我试过设置“允许服务与桌面交互”。

当我尝试从 PowerShell 或从 c# 服务启动进程时,我不断收到 Access is denied 错误。

当我尝试在服务上使用 c# 进行转义时,这是一个示例异常。

如何从会话 0 中逃脱?

我可以重新编写 c# 代码以在不同的用户下启动进程。或者我可以重新编写调用的 PowerShell 脚本以作为用户启动另一个进程。无论我尝试什么,我似乎都无法摆脱会话 0。

0 投票
0 回答
876 浏览

service - 服务在会话中运行!= 0 但在会话 0 中失败

我有一个服务,它执行一个调用 python 程序的 .bat 文件。python 程序包括 win32com 模块。

如果服务作为会话 0 运行,它会在 win32com 深处的某个地方失败。

但是,如果服务以 session != 0 的形式运行,则执行正常。同样,如果从桌面上的 cmd 窗口执行 .bat 文件,它运行正常。

关于为什么会发生这种情况的任何想法?