如何解决Windows print spooler服务崩溃的问题?

日期: 2009-11-24 作者:Bruce Mackenzie-Low翻译:唐琼瑶 来源:TechTarget中国 英文

如今市场上有各种类型的打印机和驱动,确定是哪一种导致print spooler服务崩溃或者中止是个难题。一个打印驱动会影响上百个用户。在本文中,TechTarget中国的特约专家Bruce Mackenzie-Low将介绍如何确定哪个打印驱动导致spooler服务崩溃。   概述   解决print spooler崩溃的过程就如解决系统崩溃的过程。

不过print spooler可能不会自己产生故障转储,因此有款叫做ADPlus的工具能用于捕获内存转储。ADPlus是一个VB脚本,能作为Windows调试工具的一部分从微软官网免费下载。安装好调试工具后,可以在以下文件里发现ADPlus.vbs:……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

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故障。

print spooler

点击图片本身就能放大

  另一个有用的命令是!peb,它允许你查看与print spooler进程相关的所有驱动和DLL。这个命令显示了如下图所示的进程环境块。略去了多数输入。

print spooler

  最后,确定故障发生时正在访问的打印机和工作使用!teb命令。这将显示提供栈基点与极点的线程环境块。然后你能使用dc命令显示栈内容,揭露导致问题的打印机。在输入页里找,最终能在ASCII文本里识别打印机、工作和端口编号。

print spooler

  在本例中,打印机名字叫做PRINTER1,工作编号是203,端口编号是04。如果你仔细看,栈内容也包括相关的驱动。知道导致问题的打印机和驱动后,就可以联系相关的厂商,看是否升级到可以解决问题的驱动。

  如你所见,一旦你熟悉工具,解决print spooler故障很容易,使用ADPlus捕获转储,然后使用Windbg进行分析,最后在网上搜索相关的解决方案。自己掌握和解决问题能节约时间、金钱,并且不会被用户抱怨。

相关推荐