我在任何方面都不是终端服务专家,我需要帮助尝试使申请程序在多用户中工作和多台打印机环境。每个用户都有自己的本地(USB)连接的打印机。每个打印机都以唯一的名称显示在 ts 会话中。旧版应用程序只能配置为打印到一台打印机。配置对于用户来说是全局的,对于机器来说是本地的,这对于单个工作站来说没问题,但在 ts 中却不是这样,因为 ts 显然对所有用户来说都是一台机器。
问题是打印机会随着每个登录用户而改变。应用程序需要打印的不是默认打印机,而是应用程序中选择的“特殊”打印机……为了简化解释,我们称之为标签打印机。您有默认的常规打印机,应用程序很容易找到它,然后您有一台打印标签的特殊打印机。应用程序需要知道哪台打印机是标签打印机。因此,我们允许用户在应用程序中选择它,并且选择存储在 C:\ProgramData\mfgr\prog\setting files 中的配置文件中
我无法访问该应用程序,所以我无法改变其工作方式或配置的存储位置。
在“常规”世界中,选择标签打印机驱动程序应为每个机器,而不是用户将新用户登录到机器时,物理打印机不会“ po of”,而新的打印机则突然出现。
然而在终端服务中,物理机器与服务器上的虚拟机“合并”。因此,每个用户的真实机器(和真实打印机)都被注入到“假”终端服务机器中。打印机的名称对于每个用户都是唯一的。因此,打印机确实会“消失”并根据登录到终端服务的用户更改名称。
因此,用户“A”登录并设置应用程序以打印到“LabelPrinterForUserA”(或打印机的任何名称),该设置存储在 ProgramData 子文件夹中,一切正常。稍后,用户“B”登录,当他们打印时,应用程序尝试打印到“LabelPrinterForUserA”,而对于用户 B 来说,该打印机并不存在。如果用户 B 重新配置,则用户 A 的打印机将无法使用。
解决方案 1:我认为应该这样工作:在终端服务中定义一台“通用”打印机……称之为“虚拟标签打印机”,当用户打印到该打印机时,打印作业将被重定向回实际连接到其本地工作站的任何物理打印机。终端服务器中有一个映射或设置,当作业到达虚拟打印机时,它会告诉它为每个用户使用哪台实际打印机。应用程序被告知一次为所有用户打印到“虚拟标签打印机”。
解决方案 2:或者...应该有某种方法将 ProgramData 子文件夹按用户分开。例如,当用户“A”尝试访问:C:\ProgramData\mfgr\prog\setting 文件时,他们实际上获得的是 C:\UserData\UserA\AppData\mfgr\prog\setting 文件,而用户“B”获得的是 C:\UserData\UserB\AppData\mfgr\prog\setting 文件
所以我的问题是:这些解决方案是否隐藏在终端服务器设置中的某个地方?或者是否有我不知道的解决此问题的其他方法?
更新
要澄清,不只是一打印机。有多台打印机。每个用户都有一个物理打印机(我们称之为标签)USB 连接到他们的物理工作站。我从管理员那里了解到,当用户安装他们的打印机时,打印机的名称必须不同。你是说每个用户都可以安装自己的打印机并使用完全相同的名称吗?
答案1
我能体会到您在终端服务器上使用旧软件的痛苦......我想到的解决方案肯定无法扩展,因为它需要一些手动配置,但我已经让这种方法适用于我们的标签打印机(需要打印到 LPT 端口...是的,就是那么旧)。
将 USB 连接的打印机共享到每台计算机上的网络。然后,让用户登录独特的为每个计算机创建一个会话(为此,计算机之间不能共享 TS 帐户)并安装指向它们共享的 USB 的网络打印机。尝试使用 DNS 名称来解释可能的 DHCP 移动。
之后,每个用户都可以做到这一点,因为只要端口是不同的(它们是不同的),则显示名称可以相同。
答案2
听起来该应用程序不适合在多用户环境中运行(从它将配置设置存储在程序数据中这一事实可以看出),我的建议是在终端服务器上安装打印机并让用户选择在终端服务服务器上本地安装的打印机。