UWP 代理组件 Restart/Stop DLL

UWP Brokered Component Restart/Stop DLL

所以我正在按照本指南为我的 UWP 应用实现打印 https://docs.microsoft.com/en-us/windows/uwp/winrt-components/brokered-windows-runtime-components-for-side-loaded-windows-store-apps#creating-and-deploying-the-windows-runtime-proxy

我有一个打印机停止工作的错误,我意识到一个解决方法是进入任务管理器并删除与 dll 关联的 COM 代理。我不确定如何找出这是什么 dll,以前有人 运行 遇到过这个问题吗?

我认为解决方法是以某种方式重新链接组件,但不确定如何。

我已经在 LOB 应用程序中使用这种技术(代理 Windows 运行时组件)好几年了,它始终是维护的 PITA。

每次我对 Brokered Windows Runtime Component 进行更新时,我都需要使用 regsvr32.exe 重新注册它。如果我有 运行 应用程序并且 COM Surrogate 已经 运行ning,注册将失败。我将需要重新启动系统,或者我必须在任务管理器中杀死 运行ning "dllhost.exe" - 可能有多个 dllhost.exe 实例,我只杀死那些 运行 在当前登录用户下,并将那些 运行 保留为 SYSTEM.

其中一个 dllhost.exe 实例托管您创建和注册的 DLL。目前还不清楚为什么打印机停止工作,所以我无法给出答案。为了帮助调查,在这些点上添加一些日志。

  1. 当应用程序代码调用 Brokered Windows 运行时组件时,检查调用的 return 值,并尝试捕获任何异常。

  2. 在 Brokered Windows Runtime Component 内部,在 App 调用的方法的入口和出口处。

  3. 检查使用打印机的代码,是否正常工作?或者它根本就没有被调用?

从 UWP 打印的正确方法是使用 Windows.Graphics.Printing、Windows.UI.Xaml.Printing、PrintDocument APIs,如下所述: https://docs.microsoft.com/en-us/windows/uwp/devices-sensors/print-from-your-app

需要注意的一点是,这种方法目前不支持silent/unattended打印场景。对于那些您将不得不使用经典的 Win32 打印 API,或者从代理组件(如您尝试的那样)或使用 UWP 的桌面扩展。后者是首选途径(代理组件是 Win8 时代的技术)。我在这里有一个关于桌面扩展的快速教程:https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-1/ and a very simple silent printing sample here: 1drv.ms/u/s!AovTwKUMywTNnOsbzlRfghOikDy8Dw