问题标签 [terminal-services]

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 投票
2 回答
3004 浏览

windows - 如何检测 Windows 终端服务器是否处于安装模式

我可以使用以下命令来确定 Windows 终端服务器是否处于安装模式。

如何通过 Windows API 以编程方式检测到这一点?

0 投票
1 回答
1641 浏览

localhost - localhost 在 Windows 终端服务服务器中是什么意思?机器还是会话?

我目前正在调查一个项目,以创建一个应用程序,该应用程序将在 Windows 终端服务环境中侦听“localhost”。

我目前无法访问测试环境,但我想检查这个设计,尤其是 localhost/loopback 127.0.0.1 在多用户机器中的含义。

如果我的应用程序绑定了一个监听 127.0.0.1:40000 的 TCP 套接字,那么哪些客户端能够访问它?- 它是否对机器/服务器上所有用户的所有会话中的客户端开放?- 还是只是每个单独的用户/会话?

我希望/猜测后者。如果是这种情况,那么每个会话中的每个用户都可以打开他们自己的应用程序并在 127.0.0.1:40000 上运行侦听器吗?

感谢您对此设计问题的任何帮助。

0 投票
1 回答
524 浏览

windows - 什么是 Windows 平台上的终端服务器/终端服务?

我目前正在阅读一些 Windows API 的 MSDN 描述,WTSEnumerateSessions例如,它有一些词,例如

... 在终端服务器上使用 ...

... 需要运行终端服务

但是似乎没有解释所有这些“终端”的东西是什么,以及我如何确保它实际上正在运行。

我能确定每台 Windows XP SP3、Vista 和 Windows 7 机器都在运行这些终端服务吗?

0 投票
1 回答
370 浏览

windows - 将客户端打印机映射到 Windows 终端服务器的 API

当用户使用 RDS 客户端时,我正在编写一个实用程序来将本地计算机上可用的打印机映射到终端服务器。我发现http://support.microsoft.com/kb/312135使我们能够手动执行此操作,但我只想开始通过 API 执行此操作。任何帮助将不胜感激。

0 投票
3 回答
2042 浏览

winapi - Windows 会话 API 在 Windows XP 上未及时加载以及绕过它的方法

我正在编写一个服务应用程序,它需要枚举所有当前用户会话,并获取他们的会话 ID,然后查看哪些进程正在为哪些会话运行。我正在使用WTSEnumerateSessions()API,以及WTSQuerySessionInformation()获取会话特定信息。不幸的是,那些 WTS API 非常不可靠。

在关闭快速用户切换的 Windows XP 机器上,或在加入域的 XP 机器上,这些 API 不会立即可用。RPC_S_INVALID_BINDING在 Windows XP 启动并且我的服务启动后的几分钟内,它们可能会失败并显示错误代码或 1702。

我找不到任何官方文档来解释如何处理这种限制。通过搜索引擎可用的方法是等待终端服务服务加载,这当然是可能的,但在 a** 实施中成为主要的痛点。

因此,如果有人可以回答以下问题,我将不胜感激:

  1. 是否有任何替代 API 可以处理特定于会话的数据,比那些 WTS 更可靠?我主要需要查看机器上的当前会话,获取用户名和会话状态。还要为每个进程枚举具有会话 ID 的进程。(我知道这是可能的,因为 GINA 或登录屏幕可以在终端服务加载之前完成所有这些操作。)
  2. 在我的服务在任何版本的 Windows Vista/Windows 7 机器上启动之前WTSEnumerateSessions(),是否 100% 保证 WTS 类 API(例如WTSQuerySessionInformation()WTSEnumerateProcesses())会加载?

请注意bofore任何非常重要的规定。

0 投票
1 回答
1851 浏览

delphi - 在 Windows 7 上的 Delphi 2007 中枚举终端服务会话

我正在使用 QWINSTA.EXE 从我们网络上的终端服务器获取会话/用户列表(我的计算机是 Windows 7 Pro,TS 是 Windows Server 2003)。我将此函数的输出通过管道传输到一个文本文件,然后处理该文本文件以获取我需要的信息。如果有更好的方法,请原谅并跳过我冗长的帖子,并指出我正确的方向。

我的问题是,在ShellExecute()没有ShellExecuteEx()首先提升权限的情况下,我什至不允许我执行该程序。如果您转到未提升的命令提示符,您甚至不会在目录列表中看到 EXE(也没有隐藏属性)。使用“以管理员身份运行”命令提示符,您可以很好地查看/使用它。无论如何,您都可以从 Windows 资源管理器中看到它。

我摸索了一下,发现了这个宝石:RunFileAsAdminWait()如果我尝试直接调用 QWINSTA.EXE 则不起作用(它会失败并显示错误消息:)System Error. Code: 2. The system cannot find the file specified.。如果我将所有内容打包成一个批处理文件并RunFileAsAdminWait()在批处理文件上使用,那么它似乎工作正常。

我知道,但没用过,WTSEnumerateSessions(). 除了我刚刚链接到的 MSDN 链接之外,我找不到太多关于它的信息。任何人都知道使用 Delphi 的 API 的大量参考代码吗?它在 Delphi 2007 的 Windows 单元中不可用。

问题:

  1. 是否有另一种/更好的方法来执行需要管理员权限才能访问的 EXE?或者这就是这里发生的事情?

  2. 有没有更好的方法来获取终端服务器上的活动会话列表,尤其是不需要提升权限的会话?

  3. 如果我坚持使用这种方法,我是否以“正确的方式”进行操作?

感谢您提供的任何帮助!

0 投票
1 回答
525 浏览

c# - Cassia TS 库报告错误的会话登录时间(有时...)

有人熟悉决明子终端服务库吗?我的登录时间有问题。

在某些 PC 上,时间比应有的时间晚了大约 7 分钟。我读到有一个类似的错误,但已得到纠正。

我有一个在 LocalSystem 下运行的服务,它报告例如12:07:10,但我知道用户在12:00:00. 查看事件日志,验证时间。终端服务器管理器和鬣狗也显示正确的登录时间。

如果我使用相同的库和方法远程查询那台机器,我会得到正确的登录时间。

0 投票
1 回答
1757 浏览

c++ - 在终端服务器中打印原始数据

这是场景:

  • 我有一个带有终端服务器的 Windows Server 2008(没有域控制器,没有加入域)
  • 我有一台更新了 Windows XP SP3 的客户端计算机(.NET 3.0 SP1 和 .NET 4.0)
  • 我正在使用 Embarcadero C++Builder (BCB6)
  • 我有一台票据打印机(热敏打印机、POS 打印机、爱普生、斑马等)

当我连接到终端服务器时,打印机工作正常。我测试了打印测试页。

当我使用我的软件在本地计算机上的终端服务器中发送原始数据时,我收到此错误:

我听从了这个支持页面的建议,但没有运气。

我以前直接打印到 LPT1:,但在 Windows Server 2008 中,这项工作变得越来越难,所以我们必须改变打印到这种打印机的方式。

这是我正在使用的代码。我在本地测试,它工作正常,但在终端服务器不工作:

我从 Microsoft 支持中的示例复制了此代码。我也尝试将“RAW”更改为“TEXT”,但我得到了同样的错误。

我尝试了这段代码,因为它使用 GDI 打印:

这是我在 Embarcadero 论坛中找到的一个示例。

我还验证了 TsWpfWrp.exe。我尝试用服务器中的替换它,但它什么也不做,不发送错误,也不会发送任何数据。

还有另一种方法可以做到这一点吗?我的代码有问题吗?

我感谢任何帮助或见解。

0 投票
1 回答
2171 浏览

windows - 禁用当前会话中使用的输入设备(键盘、鼠标)

我正在开发一个在输入设备之上工作的过滤器驱动程序。值得注意的是,我正在我的开发机器上对其进行测试(是的,我知道这是一个坏主意)。

在 Windows XP 上,每当我需要重新加载过滤器驱动程序时,我只需执行一个批处理文件,该文件将通过 devcon 禁用-启用相关设备,从而导致我的过滤器驱动程序卸载并重新加载。

但是,在 Windows 7 上,似乎有一个针对禁用会话正在使用的输入设备的特定措施。该选项在设备管理器中变得不可用,甚至 devcon 不再起作用。它确实可以从远程桌面会话以及内核调试打印“尝试禁用未在此会话中启用的物理设备”中工作。(这暗示某些明确的事情允许我这样做)。

有没有办法禁用 Windows 7 的此功能?或者您可以提供一种解决方法,从不相关的会话中运行我的禁用启用批处理文件?

0 投票
2 回答
5563 浏览

session - 检测 Citrix XenDesktop 会话

我正在寻找确定我们的应用程序是否在 XenDesktop 会话上而不是在本地运行。这是我到目前为止发现的:


我们目前有检测 Citrix XenApp 会话的代码,类似于 Helge Klein 在“用于确定应用程序是否在 Citrix 或终端服务上运行的 API ”中提到的解决方案。

遗憾的是,XenDesktop 环境中的解决方案正在返回一个表示本地控制台会话的 a WTSClientProtocolType0

在回答同样的问题时,Josh Weatherly 提到了检查 sessionname 环境变量。

但是,在 XenDesktop 环境中进行快速控制台检查echo %sessionname%会返回“控制台”。

来自“ Detect citrix”应用程序模式? ”John Sibly 提出了一种检测远程会话的解决方案(特别是不是 Citrix):

GetSystemMetrics(SM_REMOTESESSION)然而返回 0 这也意味着它是一个本地会话。


有谁知道检测它是 XenDesktop 会话的方法吗?就您所见,我所有的尝试都返回该会话是本地控制台会话。

我正在使用 XenDesktop Express 5.5,使用 Citrix Receiver Web 插件访问桌面。