串行端口

最新的 PC 没有内置串行 (COM) 端口。可以通过 USB 转换器轻松添加这些端口。适合串行端口的应用程序通常涉及传感器、控制器、旧检查读取器、板等。某些 USB 虚拟 COM 端口设备使用供应商特定的驱动程序来代替 Windows 提供的驱动程序 (usbser.sys)。这些驱动程序允许您强制使用 USB 设备的虚拟 COM 端口,以便其即使连接到不同的 USB 插槽也不会发生变化。可以通过从设备管理器 > 端口(COM 和 LPT) > 属性或从控制设备的应用程序完成此操作。

通过客户端 COM 端口映射,在虚拟会话期间将能够使用连接到用户的端点上的 COM 端口的设备。可以像使用任何其他网络映射一样使用这些映射。

对于每个 COM 端口,操作系统中的驱动程序将分配一个符号链接名称,例如 COM1 和 COM2。然后,应用程序将使用该链接访问端口。

重要提示

  • 由于设备可以使用 USB 直接连接到端点,因此并不意味着可以使用通用 USB 重定向功能对其进行重定向。某些 USB 设备功能的运行方式与虚拟 COM 端口相似,应用程序可以通过与物理串行端口相同的方式进行访问。操作系统可以将 COM 端口抽象化并将其视为类似于文件共享的对象。虚拟 COM 的两个公共协议为 CDC ACM 或 MCT。通过 RS-485 端口连接时,应用程序可能完全不运行。请获取一个 RS-485 转 RS232 转换器以将 RS-485 用作 COM 端口。
  • 仅当连接到客户端工作站上的 COM1 或 COM2 时,某些应用程序才能一致地识别设备(例如,签名板)。

将客户端 COM 端口映射到服务器 COM 端口

可以通过以下三种方式将客户端 COM 端口映射到 Citrix 会话:

  • Studio 策略。有关策略的详细信息,请参阅端口重定向策略设置
  • VDA 命令提示窗口。
  • 远程桌面(终端服务)配置工具。
  1. 启用客户端 COM 端口重定向自动连接客户端 COM 端口 Studio 策略。应用后,某些信息将在 HDX Monitor 中提供。

    HDX Monitor 图片

  2. 如果自动连接客户端 COM 端口无法映射该端口,则可以手动映射该端口或使用登录脚本。登录到 VDA,然后在命令提示窗口中键入:

    NET USE COMX: \\CLIENT\COMZ:

    NET USE COMX: \\CLIENT\CLIENTPORT:COMZ:

    X 为 VDA 上的 COM 端口号(端口 1 到 9 可用于映射)。Z 为要映射的客户端 COM 端口号。

    要确认操作是否成功,请在 VDA 命令提示窗口中键入 NET USE。显示的列表中将包含映射的驱动器、LPT 端口和映射的 COM 端口。

    net use 命令图片

  3. 要在虚拟桌面或应用程序中使用此 COM 端口,请安装您的用户设备应用程序并将其指向映射的 COM 端口名称。例如,如果将客户端上的 COM1 映射到服务器上的 COM3,请在会话期间在 VDA 中安装您的 COM 端口设备应用程序并将其指向 COM3。使用此映射 COM 端口时,就如同在使用用户设备上的 COM 端口一样。

重要提示

COM 端口映射与 TAPI 不兼容。不能将 Windows 电话应用程序编程接口 (TAPI) 设备映射到客户端 COM 端口。TAPI 定义应用程序为数据、传真和语音通话控制电话功能的标准方式。TAPI 管理信号发送,包括拨号、应答和结束通话。此外,还管理呼叫保留、呼叫转接和电话会议等补充服务。

故障排除

  1. 请确保您能够直接从端点访问该设备,不需要通过 Citrix。端口未映射到 VDA 时,您将不连接到 citrix 会话。请按照设备附带的任何故障排除说明进行操作,并先确认其在本地运行。 设备连接到串行 COM 端口时,将在此处显示的配置单元中创建一个注册表项: 故障排除图片

    还可以在命令提示窗口中通过运行 chgport /query 查找此信息。

    从命令提示窗口进行故障排除图片

    如果设备的故障排除说明未提供,请尝试打开 PuTTY 会话。选择 Session(会话)并在 Serial line(串行线)中指定 COM 端口。

    通过 PuTTY 会话进行故障排除图片

    可以在本地命令窗口中运行 MODE。输出可能会显示正在使用的 COM 端口以及波特/奇偶校验/数据位数/停止位数,您的 PuTTY 会话中需要这些信息。如果 PuTTY 连接成功,请按 Enter 键查看来自设备的反馈。无论您键入哪些字符,都可能会在屏幕上重复出现或被响应。如果此步骤不成功,您将无法从虚拟会话中访问该设备。

  2. 将本地 COM 端口映射到 VDA(使用策略或 NET USE COMX: \\CLIENT\COMZ:),并重复执行上一个步骤中相同的 PuTTY 过程,但这一次从 VDA PuTTY 执行。如果 PuTTY 失败并显示错误 Unable to open connection to COM1. Unable to open serial port(无法打开与 COM1 的连接。无法打开串行端口),则表示另一个设备可能正在使用 COM1。

  3. 运行 chgport /query。如果 VDA 上的内置 Windows 串行驱动程序自动将 \Device\Serial0 分配给 VDA 的 COM1 端口,请执行以下操作: A. 在 VDA 上打开 CMD 并键入 NET USE

    B. 删除 VDA 上的任何现有映射(例如,COM1)。

    NET USE COM1 /DELETE

    C. 将设备映射到 VDA。

    NET USE COM1: \\CLIENT\COM3:

    D. 将 VDA 上的应用程序指向 COM3。

    最后,请尝试将您的本地 COM 端口(例如,COM3)映射到 VDA 上的其他 COM 端口(非 COM1,例如 COM3)。请确保您的应用程序指向该端口: NET USE COM3: \\CLIENT\COM3

  4. 如果您现在看到映射的端口,则表示 PuTTY 正在运行,但不传递数据,它可能是一个争用条件。应用程序可能会在其映射之前连接并打开该端口,将其锁定以阻止其映射。请尝试以下操作之一:

    • 打开相同服务器上发布的第二个应用程序。等待几秒钟时间以便端口完成映射,然后打开尝试使用该端口的真正应用程序。
    • 在 Active Directory 而非 Studio 中从组策略编辑器启用 COM 端口重定向策略。这些策略为客户端 COM 端口重定向自动连接客户端 COM 端口。可能会先处理通过这种方式应用的策略,然后再处理 Studio 策略,以保证映射 COM 端口。Citrix 策略将推送到 VDA 并存储在: HKLN\SOFTWARE\Policies\Citrix <用户会话 ID>

    • 要为用户使用此登录脚本而非发布应用程序,请发布一个 .bat 脚本,该脚本首先删除 VDA 上的任何映射、重新映射虚拟 COM 端口,然后再启动该应用程序:

    @echo off NET USE COM1 /delete NET USE COM2 /delete NET USE COM1: \\CLIENT\COM1: NET USE COM2: \\CLIENT\COM2: MODE COM1: BAUD=1200(或所需的任何值) MODE COM2: BAUD=9600 PARITY=N Data=8 Stop=1(或所需的任何值) START C:\Program Files\<软件路径>\<your_software.exe>

  5. 如非绝对必要,请勿使用 Sysinternals 发布的进程监视程序。在 VDA 上运行该工具时,请查找并过滤 COM3、picaser.sys、CdmRedirector 等对象,特别是 <your_app>.exe。所有错误都可能会显示为“访问被拒绝”或类似的错误。

串行端口