UWP代理组件重新启动/停止DLL

时间:2018-10-23 18:04:43

标签: c# printing uwp com components

所以我正在按照本指南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

为我的UWP应用实现打印

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

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

2 个答案:

答案 0 :(得分:0)

几年来,我在LOB应用程序中使用了这种技术(Brokered Windows运行时组件),并且它始终是维护的PITA。

每次我对Brokered Windows Runtime Component进行更新时,都需要使用regsvr32.exe重新进行注册。如果我已经运行了该应用程序并且COM Surrogate已经在运行,则注册将失败。我将需要重新启动系统,或者必须杀死任务管理器中正在运行的“ dllhost.exe”-可能有dllhost.exe的多个实例,而我只是杀死了在当前登录用户下运行的实例,并让它们以SYSTEM身份运行。

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

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

  2. 在Brokered Windows运行时组件内部,在由App调用的方法的入口和出口处。

  3. 检查使用打印机的代码,它是否正常工作?还是完全被调用?

答案 1 :(得分:0)

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

要注意的一件事是,这种方法当前不支持静音/无人值守打印方案。对于那些用户,您将不得不使用经典的Win32打印API,或者通过代理组件(如您所尝试的那样)或使用UWP的桌面扩展来解决。后者是首选途径(代理组件是Win8时代的技术)。我在这里有一个有关桌面扩展的快速教程:https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-1/,在这里有一个非常简单的无声打印示例:1drv.ms/u/s!AovTwKUMywTNnOsbzlRfghOikDy8Dw