“另存为”对话框出现在正在打印到 XPS 打印机的应用程序窗口后面。

本文可帮助你解决以下问题:“ 另存为 ”对话框隐藏在打印到 XPS 文档编写器打印机的应用后面,应用程序停止响应。

原始产品版本: XPS 文档编写器
原始 KB 数: 2567869

症状

请考虑以下方案:

  • 在 64 位版本的 Windows 7 上运行 32 位应用程序。
  • 在应用程序中通过 Microsoft XPS 文档编写器(MXDW)打印机进行打印。 在此方案中,“ 另存为 ”对话框显示在应用程序后面。

此外,可能会遇到以下症状:

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

注释

当打印到驱动程序显示“ 另存为 ”对话框或其他模式对话框的其他打印机时,也可能出现此问题。 Adobe PDF 打印机的打印机驱动程序是这种类型的驱动程序。

原因

打印机驱动程序作为动态链接库(DLL)实现,这些库加载到正在打印的进程中。 打印机驱动程序在 64 位版本的 Windows 上实现为 64 位 DLL,在 32 位版本的 Windows 上实现为 32 位 DLL。

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

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

当 32 位应用程序在 64 位版本的 Windows 上调用 StartDoc 函数时,Splwow64.exe 进程调用 32 位应用程序的 XPS 文档编写器打印机驱动程序。 在此方案中,“ 另存为 ”对话框是未拥有的,因为 Splwow64.exe 进程中的线程没有活动窗口。 对话框可能显示在正在打印的应用程序后面,因为 Splwow64.exe 进程无权设置前台窗口。 此外,由于对话框是未拥有的,因此当对话框关闭时,调用 StartDoc 该函数的应用程序可能不会成为前台应用程序。

StartDoc在关闭对话框之前,调用不会返回,因此应用程序可能停止响应。

另存为 ”对话框在 Windows 资源管理器任务栏中具有其自己的按钮(如果由 Splwow64.exe 进程创建)。 这是因为对话框没有所有者。 当 Splwow64.exe 进程无法设置前台窗口时,任务栏按钮也会闪烁。

解决方法

若要解决此问题,可以通过其任务栏按钮访问“ 另存为 ”对话框。 或者,可以按 Alt+Tab 将焦点切换到对话框。

详细信息

软件开发人员可以通过让这些应用程序检测到用户何时打印到 XPS 文档编写器打印机或 Adobe PDF 打印机来避免其 32 位应用程序中出现此问题。 然后,应用程序在调用DOCINFO.lpszOutput函数时指定结构成员中StartDoc文件的完整路径。 打印机驱动程序将使用指定的文件,而不是提示用户输入文件。

第三方信息免责声明

本文讨论的第三方产品由独立于微软的公司制造。 Microsoft对这些产品的性能或可靠性不作任何明示或暗示的保证。