Citrix XenApp和XenDesktop 打印系统解析①

贾之宽曾经在一篇文章里评论汪峰和许巍的区别时说,汪峰是入世的哲学,也就是儒家哲学,通俗的说就是要拯救世界。而许巍是出世哲学,是道家,讲究无为而治,希望归隐山林什么的。汪峰,许巍,我都喜欢,我更喜欢汪峰,不是因为他更好,而是他更符合我现在的心境。也许以后我会觉得许巍更符合我的心境。但我坚信我们普通的每个人都有这样的倾向,这不是伟人的特权。有的人知足,乐于逍遥;有的人愤青,不平于世。

--题外话

我发现写一些WIndows打印的细节你们并不爱看,那我直接写Citrix的打印技术吧!

君子性非异也,善假于物也!可能人们都学过这句话,但是未必人人都能理解到位。用我们今天的话来说呢,就是牛逼的人之所以与众不同,并不是他们天生就与众不同,而是牛逼的人,更会利用自己所有的资源,会借势,会登高而望,会巧用他物,也就是能够站在巨人的肩膀之上。“如果我比别人看得更远,那是因为我站在巨人的肩上”这句话最早出现在艾萨克牛顿写给罗伯特胡克的一封信中,很多人认为这句话体现了牛顿谦逊的品格,而事实并非如此。其实,这是牛顿在嘲笑身材矮小且驼背的胡克。不管最初的出处意图是什么,但是在今天,在IT界,站在巨人的肩上意味着我们不需要重复造轮子,要实现我们的功能只需借助别人已经编辑好的代码或者以实现功能基础之上再行修改成符合我们自己要求的即可。而别人也在开发的时候给我们提供了一扇供我们爬到巨人肩上的梯子,我们只需要顺着梯子爬上去就好!

Citrix的打印技术就是站在Windows的打印技术的肩膀上的,理解Citrix打印机必须要理解Windows打印。Windows打印的一些基础概念以及打印组件等可以参看我之前发Windows打印体系结构的文章。因此在这里我就不必在阐述Windows打印基本的东西了。

本文为介绍Citrix打印技术的第一部分,行文的组织结构为:

1、介绍思杰打印环境的一些基本概念和组件

2、介绍微软和思杰打印服务

一、Citrix环境打印组件、打印机和驱动类型

1.1、主要打印组件概述

在Citrix的打印环境中,存在的主要打印组件如下:

  • 打印机
  • 打印机驱动程序
  • 打印进程
  • 打印服务器
  • 后台打印程序Print Spooler(Spoolsv.exe)
  • 思杰打印管理服务(CpSvc.exe)
  • 思杰通用打印服务(UPServer.exe)和思杰XTE服务器托管UP Web服务(XTE.exe)

1.2、Citrix环境下打印机

打印机主要指是的打印设备,包含很多类型的打印设备。Citrix有一个Citrix Ready 验证平台,Citrix Ready 验证是一个评估流程,旨在确保第三方产品与 Citrix 产品兼容。使用 Citrix Ready 验证方法成功通过指定的 Citrix 产品验证的第三方产品和解决方案,可以授予 Citrix Ready 认定标识。在Citrix环境下使用Citrix Ready验证的打印机,可以减少项目过程中产生的与Citrix 产品集成出现的兼容问题。

大家可以访问:https://citrixready.citrix.com,查看有关验证的打印机产品。

这是针对物理打印机上来说,在Citrix环境下的打印机以及确保第三方打印机产品与 Citrix 产品兼容的相关信息。

针对于软件层面来说,在Windows系统层能够被识别的就是本地打印机和网络打印机两种。而Citrix环境下,Windows的网络打印机会被识别为会话打印机。为什么网络打印机会单独标记为会话打印机呢?这主要是方便进行漫游以及进行策略的访问控制。比如说,用户可以按要提供邻近打印的IP地址过滤会话打印机策略。通过邻近打印,指定IP地址范围内的用户可以自动访问该范围内存在的网络打印设备。邻近打印由Citrix通用打印服务器提供。

如果我们需要配置邻近打印的话,需要一些必备的环境条件:

  • 内部公司网络有为用户提供IP 地址服务的 DHCP 服务器。
  • 公司内的所有部门均具有唯一的指定 IP 地址范围。
  • 网络打印机存在于每个部门的 IP 地址范围内。

如果配置了邻近打印,则员工从一个部门转移到另一个部门时,无需进行其他打印设备配置。只要用户设备在新部门的IP地址范围内得以识别,即对该范围内的所有网络打印机具有访问权限。

Windows的打印机类型在Citrix会话中的表现:

Citrix通过什么途径去识别本地打印机和网络打印机呢?一般来说,Citrix是通过读取Windows的注册表键值来识别本地打印机和网络打印机的。其中,通过读取HKLM\SYSTEM\CCS\Control\Print\Printers下的键值,识别本地打印机。通过读取HKCU\Printers\Connections下的键值,识别网络打印机。

同时,在Citrix环境下,还存在着两种特殊的打印机,即思杰通用的万能打印机对象:

  • Citrix Universal Printer(简称CUP)
  • Citrix PDF Printer(简称CPP)

这个Citrix UniversalPrinter(CUP)是Citrix基于Windows的打印体系结构的基础上开发的,使用思杰通用打印驱动程序(UPD)。其中Citrix UniversalPrinter(CUP)是在VDA桌面/服务器上创建的一台Citrix UniversalPrinter(CUP)的打印机,用户在打印的时候在Citrix会话中选择Citrix Universal Printer(CUP)打印机,Citrix UniversalPrinter(CUP)打印机会将打印任务发送到客户机上指定的默认打印机,通过客户机上的真实的默认打印机进行打印操作。如下图,创建的Citrix UniversalPrinter(CUP)在Windows中的图标和名称。针对Citrix UniversalPrinter(CUP)的详细信息我们在思杰通用打印解决方案(Citrix UniversalPrinting Solution)中再行讨论。

而对于Citrix PDF Printer(CPP),Citrix为其开发了专门的Citrix PDF driver,和adobe的PDF类似,这是一个虚拟机的PDF打印机,提供将Citrix会话中的Word文件、PPT文件以及Execl文件打印成PDF文件的能力。为什么要提供这个一个PDF打印机呢?提供这个Citrix PDF虚拟打印机的主要目的是提供给HTML5 Receiver和 Chrome Receiver使用的。在使用HTML5 Receiver和 Chrome Receiver访问Citrix会话的时候,将本地打印机或网络打印机通过TML5 Receiver或Chrome Receiver映射到Citrix会话中存在一些复杂性问题,因此为了保证这类型的会话中用户打印需求的用户体验,Citrix开发了这个Citrix PDF打印机,用户在这类型的会话中,需要打印的时候,先将其通过Citrix PDF打印机将文件打印成PDF文件,再通过别的服务器端或者客户端的打印机打印出来。

Citrix的会话如何识别这类型的特殊打印机呢?和识别网络打印机类似,也是通过注册表项识别,通过读取HKLM\SYSTEM\CSS\Control\Print\Printers下的键值识别该类型的打印机。

1.3、Citrix环境下打印机驱动程序

介绍完Citrix环境下的打印机,我们来说说Citrix环境下的打印机驱动程序。同打印机类似,访问https://citrixready.citrix.com,查看有关验证的打印机驱动程序。

在Citrix环境下,打印机的驱动类型被分为两类:

  • Universal PrinterDriver(简称UPD)
  • Native Printer Driver(简称NPD)

Universal PrinterDriver(UPD)中文全称为通用打印机驱动程序,这个通用打印机驱动程序其实在Windows平台下有Windows的通用打印机驱动程序,HP平台下有HP的通用打印机驱动程序,在Citrix平台下就是Citrix的通用打印机驱动程序。Native Printer Driver指的是本地打印机驱动程序,其实就是指打印机本身的打印机驱动程序,比如HP的打印机驱动程序或者基于Windows通用打印机驱动程序的打印机等等。

Citrix通用打印驱动程序是一款独立于设备的打印机驱动程序。如果配置 Citrix通用打印驱动程序,则系统默认使用基于EMF的通用打印驱动程序。EMF是微软的打印文件格式。在之前文章Windows打印体系中已经说明该打印格式,只是没有细说EMF的一些细节。为了方便理解,这里简单介绍下,微软支持两个所谓的打印文件格式:EMF和XPS。 EMF代表的是增强型图元位图文件,XPS代表的是XML纸张规格。打印文件格式基本上指的是应用程序生成的打印输出的类型和以及打印子系统如何将文件进行处理(路由和渲染)。虽然Windows版本不断更迭,但是EMF今天仍有广泛应用在使用,而且也许是最多的。这主要是因为Windows XP和Server 2003系统占据了我们的市场及桌面太久了,很多企业的核心业务系统都是基于这个架构所开发的,如果不想进行重构,升级也必须延续这样的架构。所以你可以大概想象依赖于EMF应用程序的数量。 XPS是后来的Vista和Server 2008中推出用于替代EMF的文件格式,但是遗憾的是,XPS到现在还没有完成这个使命,以至于在最新的Windows 10中,EMF和XPS还在相爱相杀。一个应用程序的编写,或编码方式,编译等将决定使用什么样的打印文件格式。基于Win32(Windows API)开发的应用程序,依靠并充分利用EMF打印文件格式。使用WPF(Windows演示基础),代表图形子系统用于基于Windows应用程序呈现的用户界面,依靠并使用XPS打印文件格式。

如果看过之前发的Windows打印体系结构文章的同学,可能会搞混EMF、XPS以及RAW。在这里我说明一下,EMF和XPS是微软自身开发的打印文件格式,而RAW是通用的打印文件格式,一般的打印机都支持RAW打印文件格式,RAW是使用非Windows程序的客户端的默认打印文件格式,比如Linux。也就是说,在Windows下,利用Windows的提供的API开发的程序,要么使用EMF要么使用XPS。只有特定的情况下开发的Windows客户端程序才能够生成RAW打印文件格式的数据类型,比如一些专门开发的行业软件,如PhotoShop 软件,这些软件会在软件本身安装有一款RAW虚拟打印的模块,将文件打印成RAW打印文件格式。

因此,Citrix通用打印驱动程序默认使用EMF打印文件格式,如果是采用WPF框架开发的应用程序,则会直接采用XPS的打印机。

同查看打印机类似,查看Citrix环境下的打印机驱动程序,通过注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\<Platform>\Drivers\Version-x\<PrinterDriver>

比如在我的Windows 7系统下查看的打印机驱动程序:

而如果在Windows 2012 R2或者Windows 8以上版本的系统环境下,在驱动版本哪里我们还可以看见V4的最新的驱动版本。

二、微软和思杰打印服务

2.1、Printer Spooler

Printer Spooler是Windows 打印子系统的核心组件, 它将打印数据缓存为文件, 支持脱机打印, 并负责管理和调度打印作业。Printer Spooler我们也把它称呼为打印假脱机系统。Printer Spooler打印假脱机程序由一系列的微软提供的和可选的渲染组件组成,它的作用包括:

1、检测打印任务是在本地处理还是跨网络处理。

2、接受GDI和打印驱动为特定类型的打印机所提供的数据流。

3、缓冲绘制数据到文件中。

4、从逻辑打印队列中选出第一个有效的物理打印机。

5、将缓冲的数据流(如EMF)转换成能被打印机硬件所识别的格式(如PCL)。

6、发送打印数据流到打印机硬件中。

7、为假脱机组件和打印机的相关信息维护一个基于注册表的数据库。

Spooler的组成结构以及运行处理机制可以参看之前的文章。如下图所示,在这里目录下,会有缓存的打印假脱机文件:

对于每个打印作业有系统打印后台处理程序生成了两个假脱机文件。一个.SHD结尾的扩展作业设置文件以及一个.SPL结尾的扩展绘图命令文件。

在后台对应的Windows Services如下图:

这个服务有如下作用:

  • 基本的Windows O/S打印服务
  • 管理各种打印进程
  • 可配置的后台打印目录位置
  • 、Citrix Print ManagerService

Citrix Print ManagerService中文全称为思杰打印管理服务,当该服务启动时,在后端进程中运行的是CpSvc.exe。Citrix Print ManagerService出现在2005年,Citrix在那时在自家的Citrix产品中首次加入了对打印的后台管理服务,并且开发了对应的驱动程序,默认支持EMF格式直到今天。

Citrix Print ManagerService的架构如下图所示:

根据上图,我们将Citrix Print ManagerService的组件分为:

  • Core Service
  • SPL Protocol
  • Event Management
  • Policies and PrinterManagement

CoreService(核心服务)组件是由服务器,打印机,流三种类型的对象为其提供的抽象的底层远程打印协议。这些对象的具体实例从核心服务里调用相对应的API完成和各个对象的对接,同时这三个对象通过调用ICA SPL虚拟通道协议驱动程序完成其上具体实例的调用。

SPL协议组件(ICASPL打印虚拟通道协议)处理所有发送到协议的信息。SPL打印虚拟通道是Citrix ICA协议里面的关于打印方面专门开发的虚拟通道,其包括处理的协议以及处理的驱动模块。该虚拟通道从CTX虚拟通道的远程客户端接收打印数据。并通过ICA SPL协议驱动模块进行处理。

事件管理器组件是由几类监测会话和打印机的事件的模块组成,过滤和筛选重要事件进入最后一个组件:策略和打印机管理组件。这个组件主要管理会话逻辑,并负责所有的策略执行和打印机自动创建。

ICA SPL protocol有很多细节,比如:

  • 客户端--服务器的能力协商机制
  • 打印机枚举机制
  • 打印机的功能和属性查询命令
  • 延长打印机属性应答
  • 打印数据流传输以及打印数据流压缩等等

在这里不占用较多篇幅来进行详细说明。

如上我们简述了Citrix Print ManagerService的架构,那么这个服务在整个体系处于什么样的位置?根据之前针对 Windows 打印架构的分析和研究,可发现打印机驱动和端口监视器是可替换的模块。首先,我们可以可定的是,端口监视器已经被改为SPL协议来代替传输,端口监视器模块,它不把打印数据转发给端口驱动,而是转发给Virual Channel的SPL协议驱动模块。同时,Citrix Print ManagerService在Print Spooler之前截取打印数据,经过处理之后在交付给Print Spooler服务。

2.3、Universal Printing andUP Web Services

Citrix UniversalPrinting Services中文全称是思杰通用打印服务,该服务为思杰的通用打印机、通用打印服务器以及思杰PDF虚拟打印机提供打印服务。UPWeb服务主要是通过Web即HTTP或SOAP等进远程访问的打印服务提供思杰通用打印支持,这个服务在后台主要由XTE.exe负责。特别有意思的是,XTE.exe在老版本的IMA架构中,也在XenApp中存在。后来随着FMA架构的不断完善,XTE又添加进了FMA架构中。

通用打印和UP Web服务:

接下来我们介绍思杰通用打印解决方案,敬请关注!

时间: 2024-08-05 14:02:57

Citrix XenApp和XenDesktop 打印系统解析①的相关文章

Citrix XenApp和XenDesktop 打印系统解析③

Citrix Universal PrintServer(UPS) 3.3.1.Citrix UPS概述 Citrix UniversalPrinter Server(以下简称UPS)是一个XenApp和XenDesktop环境中的一个打印组件,它有助力提高用户在网络打印方面的体验. 首先我们来说,Citrix已经有了UPD为什么还需要推出UPS?根据前文我们的描述,Citrix UPD只是解决了基于客户端的打印问题(当然并不是完全解决,部分驱动还存在兼容问题),而对于网络打印呢?Citrix

Citrix XenApp和XenDesktop 打印系统解析②

三.思杰通用打印解决方案 思杰的通用解决方案推出的时间很久了,在2004年的思杰iForum大会上,Citrix宣布推出通用打印机驱动程序(UPD)并激动的宣布,Citrix已经永久性的解决了打印的问题.但是事实上,激情之后发现其实通用打印机驱动程序也没有彻底的解决打印问题.其实打印问题长久的悬而未决是微软的问题,思杰只是创造了一些工具,从而使得打印更加的轻松. 思杰的通用打印解决方案,采用了Citrix开发的通用驱动程序(UPD)与底层网络基础设施,允许该驱动程序远程操作所有客户端打印机的设置

Citrix XenApp和XenDesktop 打印系统解析④

3.4.Citrix Universal Printer(CUP) 3.4.1.CUP概述 上述我们阐述了Citrix关于本地客户端打印以及网络打印的解决方案: UPD:解决在Citrix VDA中打印机驱动众多,存在相互冲突.内存泄漏.管理维护繁琐以及可能引起的系统崩溃等问题: UPS:解决在Citrix VDA中因传统Windows网络打印引起的问题,比如打印速度较慢.分支机构打印消耗的带宽过高.同时结合UPD解决经常需要安装和更新打印机驱动等问题. 经过这两个解决方案,提升在Citrix环

Citrix XenApp和XenDesktop 7.11新功能

Citrix已发布最新当前版本(CR)XenApp和XenDesktop 7.11,让我们来看看都有哪些新功能的更新! 对于XenApp和XenDesktop 7.11的新功能,概括性来说,管理员的对于分散的地理位置的高级管理选项,如用户位置,应用程序位置或用户配置文件位置.同时还改善并提供新的性能指标和提醒功能,更方便的自助服务密码重置功能以及更多配置选项.此版本还加强和改进3D图形渲染能力,以及Linux的应用交付和配置文件管理交付,大大提升Linux虚拟桌面和虚拟应用的用户体验. 一.拥抱

Citrix XenApp/XenDesktop的Zones解读

一.Zones的概念 Zones这个概念在Citrix的产品中存在于两个出处,第一个出处是在原来的XenApp系列产品中,用于进行大规模部署的时候,分区域进行统一管理.第二个是出现在XenApp/XenDestop 7.7中,同样用于多区域部署.纵观Citrix的产品线,一致保持着稳定更新和增长的产品是NetScaler,至于XenApp和XenDesktop,这两个产品最初采用的都是一致的架构IMA,也是Citrix最初深耕和起家的产品.后来在XenDesktop 5.x的时候Citrix改由

Citrix XenApp/XenDesktop版本正确选择

经常会有人来问我,现在Citrix XenApp/XenDesktop产品更新这么快,我应该选择什么版本.在回答这个问题之前,其实得先从Citrix目前产品发布.更新策略说起. 如果对于Citrix产品使用比较早的同学肯定都知道,作为一家有相当历史的IT软件公司,过去其产品基本是一年一更新,每年5月通过技术大会做一个通告,当地的9月左右正式发布产品.而发布的产品也少有是跨代的,一般就是SP(service pack)或者是FP(Feature Pack).如果要跨代基本要2-3年才会有一次.这种

Citrix XenApp/XenDesktop产品发布策略调整

在2016年的Citrix Summit大会上,Citrix对其核心产品XenApp/XenDesktop产品更新及发布周期提供了更为灵活而务实的发布规则,其将会对On Premise版本的XenApp/XenDesktop产品分成下面两种新的发布模式: 1. Long TermService Release,简称LTSR版本, 2. Current Release,简称CR版本. LTSR版本的主要特点为: 1. 每1~2年选定一个较为稳定的版本标定为LTSR版本,从此版本发布之日起将可以提供

Citrix XenApp/XenDesktop 7.15 LTSR发布

作为Citrix XenApp/XenDesktop 第二个LTSR版本 7.15 LTSR已经正式发布了,作为长期稳定支持版,其是Citrix推荐在生产环境中部署的版本,欢迎大家使用.http://docs.citrix.com/en-us/xenapp-and-xendesktop/7-15-ltsr.html https://www.citrix.com/downloads/xenapp-and-xendesktop/product-software/xenapp-and-xendeskt

Citrix XenApp&XenDesktop 7.15 部署实践指南——第二节·环境介绍

参考之前的的XenServer或vSphere手册配置Hypervisor,并完成虚拟机操作系统模板的创建,然后按照下表创建虚拟机,修改计算机名,配置IP地址,加域:具体创建过程不再此手册中体现:XenServer部分相关内容参考itdali.cn . 所有Windows.Windows Server都强烈建议更新至最新的补丁,这样可避免在Citrix环境下很多问题的发生:所有Windows.Windows Server在制作模板时也都建议安装.net framework 3.5..net fr