该文档描述解决自动生成打印机故障的步骤,包括本地定义,本地连接或者网络打印机器。
当该文档所描述的方法应用于Imported Network Printers, 解决方式会跟本地定义的工作站打印机器的自动生成大不一样。请参考 CTX881017 - Troubleshooting MetaFrame XP Imported Network Print Servers.
要查看关于通用打印驱动(UPD) 的鼓掌排除信息, 请参考下面文章:
• CTX107137 - Troubleshooting Printing Problems In Presentation Server 4.0.
[注:这篇文章是了解Citrix环境下打印的问题的难得的文章,请大家仔细阅读。]
步骤
解决打印机自动生成的问题,请按下面步骤操作:
1. 在Citrix Connection Configuration界面, 双击ICA ****端口, 点击Client Settings 按钮, 并确保Connect client printers at logon 被选中。对于 Presentation Server 4.5 或更高版本,使用 Terminal Services Configuration工具配置这些参数。[注:如果你对ICA和RPD侦听器的参数不是太了解我们不建议你修改任何参数]
2. 确 在Client Settings区域中以下选项没被选中:
• Disable Windows Client Printer Mapping
• Disable Client LPT Mapping
这两个选项会阻止客户端打印机在服务器上的自动生成,并禁止客户端打印机在会话过程中手动添加到服务器上。
CTX104693 - ?Client Printer mapping? and ?Client LPT Port mapping? are greyed out in ica-tcp listener
3. 如果在第一步里 “Inherent User Config” 被选中, 在UserConfig按钮里请确保 "connect client printers at logon" 被选中,并确保对于所有用户生效,包括在域用户管理器或者活动目录内的环境界面的所有用户、计算机或计算机级别的用户和用户组。
4. 在客户端机器上:
a. 与服务器直接建立ICA连接,并登录到服务器桌面。
b. 在ICA会话内打开打印机目录。
c. 增加 Printer(打印机) > Network printer(网络打印机) 然后打开 Client network(客户网络)。
d. 选择 Client printer(客户打印机)并尝试添加。
e. 结果可能如下:
• 需要一个合适的驱动程序
• 拒绝访问(权限问题)
• 打印机在客户网络上不可见 (打印机需要在本地客户打印目录中定义)
• 如果你不能展开某Microsoft 服务器的共享打印机(可能是 OS/RPC 的问题)
• 收到错误信息“Could not connect to the printer(不能连接到打印机)”。请参考 CTX102808 - Error: Could not connect to the printer
• 客户网络不可见, 请参考 CTX748796 - Users Unable to see the Client Network when in Print Manger or Connect to Printer
5. 当前的Microsoft RDP 客户端允许打印机生成。尽管RDP 不使用Citrix Client 网络服务, 作为测试, 用 RDP 客户端登录。 这样可以帮助判断是否存在底层操作系统或者是权限的问题。
6. 确保客户端机器上安装了最新的与操作系统兼容的驱动程序。在Citrix 服务器上,安装最新的与操作系统兼容的驱动程序(NT 4.0 Terminal Server, Windows 2000, or Windows 2003)。这可以通过在服务器控制台上安装“影子”打印机来完成。当打印机生成后可以在打印机管理器里把它删除。驱动程序本身和注册表信息仍会保留。验证在第7步中安装的是什么驱动程序。在 Windows 2000 和 2003上, 在Print folder(打印目录)的白色区域内点击右键 > 移动鼠标到 Server Properties(服务器属性) > Driver(驱动程序)属性页。
打印驱动程序与NT 4.0 或者 Windows 2000/2003兼容不一定就跟NT 4.0 Terminal Server Edition 或者 Windows 2000/2003 Terminal Server兼容。安装了不兼容的驱动程序可能会导致蓝屏 (请参考 Microsoft TechNet 文章 Q191666, Q249917, 还有 MetaFrame XP Feature Release/ Service Pack 2 的说明文件,是针Lexmark Z12 驱动的), spooler 的CPU占用峰值, 系统挂起,打印任务不能完成, 以及自动生成的打印机在用户注销的时候不能删除 (在打印机属性页的注释栏里没有自动生成打印机说明信息)。
类似的问题应该参照TechNet Q135406 文章中所说的,删除可疑的打印驱动,通过Management Console配置排除,手动打印驱动映射,或者只用UPD。 手动映射的过程中,在引号之间的语法,空格以及大小写都是很关键的。用来替换的打印驱动可能会限制现有打印驱动在ICA会话中的功能,考虑到不是本地驱动。
关于手动映射的详细说明和 wtsuprn.inf 文件的使用方法, 请参考 CTX626451 -Sample WTSUPRN.INF File for Use in Autocreation of Client Printers.
7. 要知道CITRIX服务器上安装了哪些驱动程序,可以查看下面的注册表信息:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments \Windows NT x86\Drivers\Version-1 (WinFrame, NT 3.51)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments \Windows NT x86\Drivers\Version-2 (NT 4.0)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments \Windows NT x86\Drivers\Version-3 (Windows 2000, 2003)
注意: 打印驱动的存在不能保证该打印过程正常。驱动程序有可能损害。可能要先删除然后再安装。
8. 检查管理员是否可以自动生成客户端打印机。如果管理员可以自动生成而一般的用户不可以,请确保用户对下面的目录起码有读,写和执行的权限:
%SystemRoot%\System32\spool
%SystemRoot%\System32\printer.inf
%SystemRoot%\System32\printer.inf
注意: 32位客户端的打印机自动生成涉及到客户端和服务器。
ICA Client 打印机的自动生成过程是在登录的时候进行的。在MetaFrame 的Terminal Server Edition上, ctxlogon 被 winlogon直接调用。 在 Presentation Server for Windows 2000 和 2003上, ctxnotif.dll 取代了 Ctxlogon.exe 和 Ctxlogof.exe 。 Winlogon, 尤其是 cmstart.exe, 调用 ctxnotif.dll, 它会对ctxlogon 进行功能调用来创建打印机连接。它处理特定的登陆过程中的 登录/注销通知消息 (例如创建打印机连接)。
9. 对于 NT 4.0 Terminal Server Edition 上的 MetaFrame 1.x , 保证拥护对ctxlogon.exe 和 ctxlogoff.exe 有读权限(RX)。默认情况下,Everyone 组在MetaFrame安装的过程中会被赋予读权限。
10. 对于 Terminal Server 4.0 的安装, 请检查下面的注册表项是否存在:
HKEY_LOCAL_Machine/Software/Microsoft/WindowsNT/CurrentVersion/Winlogon
Key Name: Userinit
Value: CTXLOGON.EXE
Key Name: Userinit
Value: CTXLOGON.EXE
对于 Windows 2000 和 2003 Terminal Server 的安装, 请检查下面的注册表项是否存在:
HKEY_LOCAL_Machine/Software/Microsoft/WindowsNT/CurrentVersion/Winlogon
Key Name: AppSetup
Value: Cmstart.EXE
Key Name: AppSetup
Value: Cmstart.EXE
注意: Cmstart.exe 的作用是确保wfshell在会话内是运行着的。
CTX102634 – WFSHELL.exe crashes when attempting to autocreate certain HP Print Drivers
CTX102634 – WFSHELL.exe crashes when attempting to autocreate certain HP Print Drivers
11. MetaFrame XP Service Pack 2/Feature Release 2 改变了客户端的网络打印机的自动生成的行为方式。MetaFrame XP Service Pack 3/Feature Release 3 以及更高的版本在Management Console 里有一个钩选框, 就在Printer Node Properties页上, 这是用来控制这个行为方式的。 对于 MetaFrame XP Service Pack 2/Feature Release 2, 请参考 Hotfix XE102W065 - For MetaFrame XP 1.0 for Windows 2000 Server - English 或者其他类似的文档,还有对应的注册表变化,以解决这个问题。
hotfix 补丁引入了一个注册表项,它可以拒你开关你想的功能—从Feature Release 2 服务器直接连接到网络打印机器或者网络打印机作为客户端打印机从ICA客户端设备打印出去。
定位到下面注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\ClientPrinterAutoCreate
Value Name: fCreateNetworkPrinter
Value Type: DWORD
Value: 1 (to have network printers created as client printers)
Value: 0 (to retain the Feature Release 2 behavior)
Value Type: DWORD
Value: 1 (to have network printers created as client printers)
Value: 0 (to retain the Feature Release 2 behavior)
使用该特性, 网络打印机会被在ICA会话中创建为客户端打印机。
对于 Presentation Server 3.0 及更高版本, 创建一个 新策略,展开 Printing(打印) > Client printers(客户端打印机),打印任务转发有两个选择, Connect directly to network print server if possible(如果可能就直接连接到网络打印服务器)或者 Always connect the printer indirectly as a client printer(总是作为客户端打印机间接连接到打印机)
12. 检查Management Console 里是否设置了禁止打印的CITRIX策略。
13. 检查Citrix Management Console 里是否设置了打印机兼容性映射或者驱动限制。
14. 对于Windows 2003上的 MetaFrame XP Service Pack 3/Feature Release 3 , 请验证 Feature Release 3 的许可是否已经从My Citrix,获得并且被安装和激活。
对于Hotfix XE103W2K3006:
在 Windows Server 2003上, 没有安装Citrix Feature Release 3 许可是不会自动生成客户端打印机的。
Windows Server 2003的 Terminal 服务更改了机制,打印机虚拟同道需要在系统上下文中创建。MetaFrame 服务器不会通过打印机虚拟通道发出打印机自动生成命令。
该 hotfix 补丁可以确保打印机虚拟通道在系统上下文中被创建,并且不再需要Feature Release 3的许可。
[#63348]
16. Citrix 自动生成的打印机是基于客户端的名称和打印机驱动名称的, 所以建议客户端采用唯一的名称:
CTX376489 - Clientnames Should Always Be Unique.
CTX376489 - Clientnames Should Always Be Unique.
自动生成打印机的算法对于某些应用程序可能会有问题,常常是名字的长度。这个现象不止会在CITRIX环境下发生,当把某个Microsoft 共享打印机的名称改成类似长度的时候也会发生这种情况。应用程序可能需要队枚举打印机以及调用打印机器API的部分作出相应的改动。请参考 Microsoft TechNet Q240082 。
17. Hewlett-Packard 引进了一种新的架构,专门针对Print Performance Architecture (PPA,打印性能架构)市场的。Microsoft 的所有操作系统都不支持PPA架构;因此CITRIX环境也不支持PPA。请参考下面文章:
• Microsoft article Q153958
18. 当测试过上面所有的步骤后,如果你的打印机仍然不能自动生成,确认驱动的名称在客户端和服务器上都是一致的。有时候驱动名称在Windows 95 和 Windows NT 3.51/4.0会有点不一样。在这种情况下,你需要在Ctxuprn.inf 文件中映射名称,在 MetaFrame 1.8 服务器上是Wtsuprn.inf (这个文件保存在 %SystemRoot%\System32 目录里),以及利用 Citrix Management Console 或者 MetaFrame XP 及更高版本上的 QPrinter.exe 命令。
注意: 对于 wtsuprn.inf 文件的用法以及一个样例文件, 请参考 CTX626451 - Sample WTSUPRN.INF File for Use in Autocreation of Client Printers.
打印算法
打印算法按以下顺序进行检测:
客户端打印机首先检查注册表。如果已经安装了打印驱动, 注册表项存在,打印机正常生成。如果注册表中没有该驱动的项目存在,它会在 ntprint.inf 文件中查找看驱动是否在NT 安装包中带有。如果这是个已知的驱动并且安装包可用(CD或者网络共享), 那么驱动程序就会在后台被安装到系统里,然后继续生成打印机。
客户端打印机首先检查注册表。如果已经安装了打印驱动, 注册表项存在,打印机正常生成。如果注册表中没有该驱动的项目存在,它会在 ntprint.inf 文件中查找看驱动是否在NT 安装包中带有。如果这是个已知的驱动并且安装包可用(CD或者网络共享), 那么驱动程序就会在后台被安装到系统里,然后继续生成打印机。
11.当选择了UPD,在Citrix Management Console里如何配置这些设置有很大影响。紧接这上面的算法步骤,默认的设置会尝试用本地驱动生成打印机后再用UPD生成。即使在Citrix Management Console里排除了驱动程序也是按照这样的顺序执行。
要查找更多的信息,请参考 CTX089874 - Troubleshooting and Explaining the Citrix Universal Print Driver.
过程概括
这个过程由客户端开始。wfica32在本地调用 API 枚举客户端的打印机然后把信息发送到服务器。这些打印机可以是客户端本地端口定义的也可以是网络打印机。打印机映射文件 (wtsuprn.inf) 会被引用,以决定采用什么驱动程序来自动生成打印机。然后通过ntprint.inf 文件,如果驱动程序安装文件可用,那么驱动程序就会被安装到服务器上。
时间
自动生成打印机所需要的时间要看用户是连接到发布出来的程序还是直接到服务器的桌面。
如果用户是连接到发布出来的应用程序,打印机生成的过程是同步的,这样程序就可以在启动的时候找到默认打印机了。这样设计是有原因的,因为某些应用程序如果检测不到默认打印机,它就不会继续启动。
如果用户是连接到服务器的桌面,打印机的创建是异步的,这样可以提高登录的速度。
在MetaFrame XP 及更高版本里,上述的过程同步可以在应用程序属性里进行设置。

