修复 Function 地址导致保护故障 - 打印错误

如果当您尝试从WordExcelPublisher 等(Publisher et al)Microsoft Office 程序(Microsoft Office program)中打印文件/文档时,您会收到打印错误消息(printing error message)函数地址导致了保护故障(Function address caused a protection fault)——那么这篇文章旨在帮助你。在这篇文章中,我们将确定一些可能触发错误的潜在已知原因,然后提供您可以尝试帮助修复此问题的可能解决方案。

打印作业(print job)失败时,您会收到以下错误消息(error message)实例;

Function address 12345 caused a protection fault.
(exception code 12345)
The application property sheet page(s) may not function properly.

函数地址引起保护故障

大多数遇到此打印错误(printing error)的用户报告说,如果他们尝试常规打印,则错误不会发生 - 只有当他们尝试从Office 应用程序(Office application)中打印时,才会出现该错误。请记住(Bear),此错误消息(error message)的各种实例具有不同的错误代码。但是,根本原因是相同的 - 因此,相同的修复程序应该适用于此错误的所有实例。

由于以下一种或多种(但不限于)已知原因,您可能会遇到错误消息;(error message)

  • 正确的打印机未设置为默认值。
  • 过时的打印机驱动程序。
  • 损坏的打印机子项。
  • 系统(System)文件损坏 -(corruption –) 系统(System) 文件损坏(file corruption)的可能性较小,但可能是此问题的罪魁祸首。通常,它出现在安全扫描(security scan)结束隔离打印服务(printing service)使用的某些项目之后。

修复 Function 地址(Fix Function address)导致的保护故障(protection fault)

如果您遇到此功能地址导致保护故障(Function address caused a protection fault)打印错误,您可以尝试以下我们推荐的解决方案(不分先后顺序),看看是否有助于解决问题。

  1. 运行打印机疑难解答
  2. 运行 SFC/DISM 扫描
  3. 更改默认打印机
  4. 更新打印机驱动程序
  5. 卸载打印机驱动程序(printer driver)重命名打印(rename printing)子项并重新启动Print Spooler 服务(Print Spooler service)
  6. 更改LegacyDefaultPrinterMode注册表项值数据
  7. 执行系统还原

让我们看一下与列出的每个解决方案相关的过程的描述。

1]运行打印机疑难解答

运行Windows 10内置的疑难解答(Troubleshooter)程序将重新启动您的打印机和驱动程序(printer and drivers)并检查是否有任何错误。在此过程中必须连接您的打印机。

要运行打印机疑难解答(Printer Troubleshooter),请执行以下操作:

  • 单击 开始(Start) 并选择 设置。(Settings.)
  • 转到 更新和安全。( Update and Security.)
  • 单击 疑难解答(Troubleshooter) 选项卡。
  • 向下滚动并单击 打印机。(Printers.)
  • 单击 运行疑难解答( Run the troubleshooter) 按钮。
  • 按照(Follow)屏幕上的说明并应用任何推荐的修复程序。

之后(Afterward),尝试打印,看看Function address引起的保护故障(Function address caused a protection fault)打印错误是否得到解决。如果没有,请继续下一个解决方案。

2]运行SFC/DISM扫描

SFC/DISM 是Windows中的 实用程序,允许用户扫描Windows 系统(Windows system)文件中的损坏并恢复损坏的文件。

方便起见(ease and convenience),您可以使用以下过程运行扫描。

  • 按 Windows 键 + R。
  • 在“运行”对话框中,键入记事本(notepad)并按 Enter 键打开记事本。
  • 将下面的命令复制并粘贴(Copy and paste)文本编辑器(text editor)中。
@echo off
date /t & time /t
echo Dism /Online /Cleanup-Image /StartComponentCleanup
Dism /Online /Cleanup-Image /StartComponentCleanup
echo ...
date /t & time /t
echo Dism /Online /Cleanup-Image /RestoreHealth
Dism /Online /Cleanup-Image /RestoreHealth
echo ...
date /t & time /t
echo SFC /scannow
SFC /scannow
date /t & time /t
pause
  • 使用名称保存文件并附加.bat 文件扩展名 - 例如; SFC_DISM_scan.bat
  • 以管理员权限重复运行批处理文件(batch file)(右键单击保存的文件并(file and select) 从上下文菜单中选择(context menu)以管理员身份运行(Run as Administrator)),直到它没有报告错误。
  • 重新启动您的电脑。

再次尝试打印作业(print job),看看问题是否已解决。如果不继续下一个解决方案。

3]更改默认打印机

如果您要使用的打印机未在Windows设置中设置为默认值,也可能会出现(Windows)功能地址导致保护故障(Function address caused a protection fault)打印错误的情况。执行以下操作更改默认打印机(default printer)

  • 按 Windows 键 + R。
  • 在“运行”对话框(Run dialog)中,复制并粘贴(copy and paste) ms-settings:printers 并按 Enter 以打开 “设置”应用程序的“(Settings)打印机和扫描仪(Printers & scanners)” 窗口  。
  • 进入打印机和扫描仪(Printers & scanners)选项卡后,在右侧窗格中向下滚动并取消选中允许 Windows 管理我的默认打印机(Allow Windows to manage my default printer)设置。
  • 现在,单击您要使用的打印机,然后单击Set as default

将正确的打印机设置为默认打印机后,重新启动计算机并查看打印错误(printing error)是否已解决。如果没有继续下一个解决方案。

4]更新打印机驱动程序

此解决方案要求您确保已为您的打印机安装了最新的打印驱动程序。 您可以从制造商的网站下载最新版本的打印机驱动程序。(printer driver)

或者,您可以通过设备管理器更新(Device Manager)打印机驱动程序(printer driver)。这是如何做:

  • 按 Windows 键 + X 打开高级用户菜单(Power User Menu),然后按M键打开设备管理器。
  • 进入设备管理器(Device Manager)后,向下滚动已安装设备列表并展开/折叠打印队列(Print queues )部分。
  • 接下来,右键单击您遇到问题的打印机,然后从上下文菜单中选择更新驱动程序。(Update driver)
  • 在下一个屏幕上,单击自动搜索更新的驱动程序软件。(Search automatically for updated driver software.)
  • 等到(Wait)扫描完成。如果找到新的驱动程序版本(driver version),请按照屏幕上的说明将其下载并安装到您的计算机上。
  • 重新启动您的设备。

尝试发送打印作业(print job),查看功能地址导致的保护故障(Function address caused a protection fault)打印错误是否已解决。如果没有,请继续下一个解决方案。

5]卸载打印机(Uninstall printer)驱动程序,重命名打印(rename printing)子键并重新启动Print Spooler服务(Print Spooler service)

在此解决方案中,您需要完成一系列任务(包括卸载打印机驱动程序(printer driver)、重命名打印子项和重新启动Print Spooler 服务(Print Spooler service)),以查看是否可以解决Function 地址导致的保护故障打印错误。(Function address caused a protection fault)

请执行下列操作:

  • 登录到受影响的计算机。
  • 按 Windows 键 + X 打开高级用户菜单(Power User Menu),然后按M键打开设备管理器。
  • 进入设备管理器(Device Manager)后,浏览已安装设备的列表并展开打印队列(Print queues)下拉菜单。
  • 接下来,右键单击要删除的打印机驱动程序并选择(printer driver)Uninstall Device
  •  再次单击卸载以确认该过程。(Uninstall)

卸载过程完成后,您可以退出设备管理器(Device Manager)

  • 接下来,按Windows 键(Windows key)+ R 调用“运行”对话框(Run dialog)
  • 在“运行”对话框中,键入printui.exe /s /t2 并按 Enter 以打开 打印机服务器属性 UI(Printer Server Properties UI)
  • 进入“打印服务器属性(Print Server Properties)” 屏幕后,转到“ 驱动程序(Drivers)” 选项卡并选择导致问题的驱动程序。选择驱动程序后,单击删除(Remove)按钮。
  • 然后,“删除驱动程序和包”(Remove Driver And Package )对话框将提示您。
  • 选择仅删除驱动程序的单选按钮。(Remove driver only.)
  • 单击确定。(OK.)

该过程完成后,您可以退出“打印服务器属性(Print Server Properties)” 屏幕。

  • 现在按Windows 键(Windows key)+ R 打开另一个运行对话框(Run dialog)
  • 在文本框中键入regedit并按 Enter 打开 注册表编辑器(Registry Editor)

(Important:)重要提示(event something)在继续此过程之前备份注册表,以便在出现问题时能够恢复注册表。

  • 导航或跳转(Navigate or jump)到下面的注册表项路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Print Processors\

在该位置,继续使用.old 扩展名重命名(.old extension)Print Processors下的任何子项或项。这将迫使Windows忽略这些键并创建新的文件夹和值。

注意(Note):在这种情况下,只有一个子项(winprint),因此我们将其重命名为winprint.old

完成此步骤后,您可以安全地关闭注册表编辑器(Registry Editor)

  • 再次调用Run 对话框并(Run dialog box and type)文本框中键入(text box and press Enter)services.msc ,然后按 Enter 打开 Services 窗口。
  • 在“服务”窗口中,找到 Print Spooler 服务。
  • 右键单击 打印后台(Print Spooler)处理程序 并选择 属性。(Properties.)
  • 在“属性”窗口中,单击 停止。(Stop.)

这将停止打印队列进程(print queue process)。保持打印后台处理程序属性(Print Spooler Properties)窗口打开。

  • 现在,打开文件资源管理器并导航(File Explorer and navigate)到以下位置:

C:\WINDOWS\system32\spool\PRINTERS

  • 删除 打印机(Printers) 文件夹中的所有文件。

如果您没有看到任何文件,请单击 查看(View) 选项卡并选中 隐藏项目(Hidden Items) 框。

  • 关闭文件资源管理器窗口。
  • 在“后台打印程序属性”窗口(Print Spooler Properties window)中,单击“ 开始(Start)” 按钮重新启动服务。

再次重新启动计算机并在下次计算机启动(computer startup)时重新安装必要的打印机驱动程序。再次尝试打印作业(print job),看看问题是否已解决。

6]更改LegacyDefaultPrinterMode注册表键值数据

在此解决方案中,要解决Function address 导致的保护错误(Function address caused a protection fault)打印错误,您需要在Registry Editor中更改(Registry Editor)LegacyDefaultPrinterMode注册表项Value 数据(Value data)

这是如何做:

记得备份注册表。

  • 导航或跳转(Navigate or jump)到下面的注册表项路径:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
  • 在右窗格中双击LegacyDefaultPrinterMode以编辑其属性。
  • 将数值数据设置为1。

这将返回到Windows 10下的旧默认打印机行为(default printer behavior)

  • 单击确定(OK)以保存更改。
  • 重启电脑。

检查问题是否已解决。否则继续下一个解决方案。

7]执行系统还原

如果您注意到最近开始出现功能地址导致保护故障(Function address caused a protection fault)打印错误,则完全有可能是您的系统最近经历的更改导致了该问题。

如果您不知道最终可能会破坏Office应用程序的打印功能的更改,您可以使用系统还原(System Restore)(任何更改,如应用程序安装、用户首选项和在此期间所做的任何其他内容都将丢失)恢复到您确定打印工作正常的日期。

要执行系统还原(System Restore),请执行以下操作:

  • 按 Windows 键 + R。
  • 在“运行”对话框中,键入rstrui 并按 Enter 以打开“ 系统还原(System Restore) 向导”。
  • 到达System Restore的初始屏幕后,单击Next前进到下一个窗口。
  • 在下一个屏幕上,选中与Show more restore points关联的框。
  • 完成此操作后,选择一个日期早于您第一次开始注意到错误的日期的点。
  • 单击下一步(Next) 前进到下一个菜单。
  • 单击完成(Finish) 并在最后的提示处确认。

在下一次系统启动(system startup)时,您的旧计算机状态(computer state)将被强制执行。

Hopefully, any of these solutions will fix the issue for you!



About the author

我是一名计算机技术人员,拥有超过 10 年的经验和使用 Android 设备的经验。过去五年我也一直在办公室工作,在那里我学会了如何使用 Office 365 和 MacOS。在业余时间,我喜欢花时间在户外听音乐或看电影。



Related posts