另存为对话框中将显示后面的应用程序打印到 XPS 文档编写

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 2567869
症状
请考虑以下情形:
  • 您在 64 位版本的 Windows 7 上运行 32 位应用程序。
  • 从应用程序到 Microsoft XPS 文档编写器 (MXDW) 打印机打印。
在这种情况下,另存为对话框中将显示此应用程序后面。

此外,您可能会遇到下列症状︰

  • 应用程序似乎停止响应 (挂起),直到您输入的文件名或取消打印任务。
  • 另存为对话框关闭时,打印的应用程序不会成为前台 (活动) 应用程序。

注意当您打印到其他打印机的驱动程序将显示另存为对话框中或另一个模式的对话框,也可能出现此问题。Adobe PDF 打印机的打印机驱动程序是这种类型的驱动程序。
原因
打印机驱动程序实现为动态链接库 (Dll) 加载到进程中,正在打印。作为 64 位版本的 Windows 上的 64 位 Dll 和 32 位版本的 Windows 上的 32 位 Dll 实现打印机驱动程序。

32 位进程无法加载 64 位 Dll。因此,64 位版本的 Windows 支持从 32 位进程通过 Splwow64.exe 过程的打印。Splwow64.exe 是一个 64 位进程,可以加载 64 位打印机驱动程序和处理打印代表 32 位进程。

当应用程序调用StartDoc函数来打印到 XPS 文档编写器打印机时,XPS 文档编写器打印机驱动程序将显示另存为对话框,以便用户可以指定的名称和位置的 XPS 文件。对话框的所有者窗口通常是活动窗口中的线程调用StartDoc函数中,并在活动窗口的上方将显示对话框。

当 32 位应用程序在 64 位版本的 Windows 调用StartDoc函数时,Splwow64.exe 进程连接到 XPS 文档编写器打印机驱动程序为 32 位应用程序。在这种情况下,另存为对话框中处于无主状态,因为 Splwow64.exe 进程中的线程不是活动的窗口。后面的应用程序因为 Splwow64.exe 进程不具有权限设置为前台窗口打印,可能会出现对话框。此外,由于对话框处于无主状态,调用StartDoc函数的应用程序可能不会成为前台应用程序时关闭此对话框后。

StartDoc调用不返回之前被解除的对话框,以便应用程序似乎停止响应。

如果它由 Splwow64.exe 进程创建的另存为对话框中都有自己在 Windows 资源管理器任务栏中的按钮。这是因为对话框中处于无主状态。Splwow64.exe 进程不能设置为前台窗口时,也会闪烁任务栏按钮。
替代方法
要变通解决此问题,您可以通过其任务栏按钮访问另存为对话框。或者,您可以按 Alt + tab 键切换到对话框中的焦点。
更多信息
软件开发人员可以通过将这些应用程序检测到 XPS 文档编写器打印机或 Adobe PDF 打印机打印时避免 32-位应用程序中的此问题。然后,应用程序在调用StartDoc函数时DOCINFO.lpszOutput结构成员中指定文件的完整路径。打印机驱动程序将使用指定的文件,而不是提示用户输入一个文件。

本文讨论的第三方产品是由与 Microsoft 无关的公司生产的。Microsoft 不做这些产品的任何担保、默示或其他有关的性能或可靠性。

警告:本文已自动翻译

属性

文章 ID:2567869 - 上次审阅时间:08/25/2016 19:54:00 - 修订版本: 3.0

  • kbmt KB2567869 KbMtzh
反馈