如今市场上有各种类型的打印机和驱动,确定是哪一种导致print spooler服务崩溃或者中止是个难题。一个打印驱动会影响上百个用户。在本文中,TechTarget中国的特约专家Bruce Mackenzie-Low将介绍如何确定哪个打印驱动导致spooler服务崩溃。 概述 解决print spooler崩溃的过程就如解决系统崩溃的过程。
不过print spooler可能不会自己产生故障转储,因此有款叫做ADPlus的工具能用于捕获内存转储。ADPlus是一个VB脚本,能作为Windows调试工具的一部分从微软官网免费下载。安装好调试工具后,可以在以下文件里发现ADPlus.vbs:……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
如今市场上有各种类型的打印机和驱动,确定是哪一种导致print spooler服务崩溃或者中止是个难题。一个打印驱动会影响上百个用户。在本文中,TechTarget中国的特约专家Bruce Mackenzie-Low将介绍如何确定哪个打印驱动导致spooler服务崩溃。
概述
解决print spooler崩溃的过程就如解决系统崩溃的过程。不过print spooler可能不会自己产生故障转储,因此有款叫做ADPlus的工具能用于捕获内存转储。ADPlus是一个VB脚本,能作为Windows调试工具的一部分从微软官网免费下载。安装好调试工具后,可以在以下文件里发现ADPlus.vbs:
Program FilesDebugging Tools for Windows
取决于print spooler服务是中止还是崩溃,ADPlus有两种模式可用。在hang模式下,ADPlus强制在应用上执行进程转储。这个转储过程包括所有除了各种DLL和打印驱动所包含的线程。一些简单的调试命令允许你决定通过spooler及其相关驱动能访问的打印机。
在crash模式下,在发生意外情况时,ADPlus将监控进程并捕获内存转储。这两种模式主要的不同在于crash模式必须在聚合过程之前建立,而hang模式在进程锁定时使用。无论何种模式,你正在调试的过程会受影响,其余的进程和操作系统持续运行而不出现宕机。
一旦捕获了进程转储,那么你能使用Windows调试器(Windbg)分析故障原因。如第一部分所讲,这个调试器也能作为Windows调试工具的一部分从微软官网免费下载。
在下面的章节中,我们将主要看看捕获共享转储的步骤,确定哪个打印驱动是罪魁祸首,并最终修复该问题。
crash模式
如上所述,在print spooler出现间歇性中止时,ADPlus的crash模式捕获进程内存。Crash模式必须在导致打印共享故障问题之前建立。第一次使用ADPlus就必须建立cscript作为默认的脚本翻译器。打开命令提示符,更改Debugging Tools for Windows的默认设置。然后执行ADPlus.vbs脚本:
C:Program FilesDebugging Tools for Windows > ADPlus.vbs
你只需要执行这个步骤一次,然后就可以使用ADPlus捕获spooler崩溃。这里,我们可以看见ADPlus语句用于设置print spooler进程上的崩溃模式检测:
Adplus –crash –pn spoolsv.exe
这个命令将控制台调试器(cdb.exe)附属到print spooler进程并最小化窗口。一旦发生意外情况,这个调试器将产生进程内存转储并终止进程。默认下,转储写在Windows文件夹调试工具的子文件里。然后你能使用Windows Kernel Debugger分析生成的转储文件。
Hang模式
在Hang模式下,当打印共享停止反应或者使用率为100%时,ADPlus强制执行进程内存转储。当用户抱怨即使spooler过程仍然存在,但是不能打印时,很明显属于这种情况。在强制执行进程内存转储后,ADPlus的hang模式将恢复进程而不是像crash模式那样中止。下面是ADPlus语句用于使用hang模式强制执行进程崩溃:
Adplus –crash –pn spoolsv.exe
分析转储
一旦获得进程转储文件,使用Windbg工具分析print spooler故障。安装Windbg后,使用该工具的第一步是建立调试器的符号路径以指到微软符号服务器。接下来,使用Windbg打开崩溃转储文件,然后输入命令:
!analyze –v
这个命令将对转储进行初步分析,对导致故障的原因作出最佳猜测。 kv命令将显示栈追踪,显示所牵涉的DLL或者驱动。栈追踪是从下往上读,因此最上面的追踪就是最近执行的功能。在下面的例子中,我们看到栈追踪表明由ABC驱动导致的spooler故障。
点击图片本身就能放大
另一个有用的命令是!peb,它允许你查看与print spooler进程相关的所有驱动和DLL。这个命令显示了如下图所示的进程环境块。略去了多数输入。
最后,确定故障发生时正在访问的打印机和工作使用!teb命令。这将显示提供栈基点与极点的线程环境块。然后你能使用dc命令显示栈内容,揭露导致问题的打印机。在输入页里找,最终能在ASCII文本里识别打印机、工作和端口编号。
在本例中,打印机名字叫做PRINTER1,工作编号是203,端口编号是04。如果你仔细看,栈内容也包括相关的驱动。知道导致问题的打印机和驱动后,就可以联系相关的厂商,看是否升级到可以解决问题的驱动。
如你所见,一旦你熟悉工具,解决print spooler故障很容易,使用ADPlus捕获转储,然后使用Windbg进行分析,最后在网上搜索相关的解决方案。自己掌握和解决问题能节约时间、金钱,并且不会被用户抱怨。
翻译
相关推荐
-
Windows服务器管理员PowerShell入门
Microsoft Windows PowerShell 4.0是脚本语言的最新版本,包含在Windows Server 2012 R2操作系统中,并且向后兼容早期的PowerShell版本。
-
如何控制桌面:用Windows桌面管理员权限换取iPad
有一种简单的方式可以既抑制用户Windows桌面管理员权利,还能让他们完成工作,加一台平板或iPad完成所有私人或非受IT支持的事情。
-
微软三大VDI虚拟桌面认证
决定部署VDI与如何提供有效支持,是组织需要关注的两个不同问题。让员工参加培训并获得认证,是确保工作人员具备部署、管理与支持VDI技能的途径之一。
-
克服多重挑战 成功从Unix迁移到Windows
和Unix正在失去企业市场相对应的是,企业也在为他们的工作负载寻找新的承载平台, 微软Windows是备选目标之一。在处理Unix到Windows的迁移工作时规避许多障碍。