在某些计算机上创建COM预览处理程序的实例失败

Cod*_*095 0 c# com wpf interop

我试图通过使用Windows执行的相同COM预览处理程序在我的应用程序中进行文件预览.我正在使用此处找到的代码.在我的家用机器上,这适用于所有文件类型但是在工作时,创建COM处理程序的实例会在大多数情况下抛出以下错误:

System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM 
class factory for component with CLSID {DC6EFB56-9CFA-464D-8880-44885D7DC193}
failed due to the following error: 80080005 Server execution failed (Exception
from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
Run Code Online (Sandbox Code Playgroud)

抛出错误的代码是:

object previewer = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)

其中type是Type使用应用程序GUID检索的.我已经在网上和SO上看了一眼,尽管这个问题看起来很普遍,但我还是找不到解决方案.

Han*_*ant 5

您在诊断此故障时遇到问题,因为崩溃的代码不是您的代码.您可以使用Regedit找回麻烦制造者,导航到HKLM\Software\Wow6432Node\Classes\CLSID并找到错误消息中报告的{guid}.您将看到它是由Adobe Reader提供的COM服务器,安装在我的计算机上的C:\ Program Files(x86)\ Adob​​e\Reader 10.0\Reader\pdfprevhndlr.dll中.

值得注意的是,您获得的COM错误代码通常与进程外COM服务器相关联,而注册的错误代码则是进程内服务器.当它被配置为使用代理时会发生这种情况,代理是一个单独的进程,当您从64位进程使用它时,它为服务器提供兼容的主目录.这肯定会发生,寻找AppId {guid},你会看到那里提到的DllSurrogate值.它是32位预览主机进程c:\ windows\syswow64\prevhost.exe.所以,诊断是它过程坠毁.

Adobe Reader出现问题并不罕见.这是一个不久前进入终端阶段的程序,每个新版本都比以前的版本更糟糕.它确实让我觉得Adobe失去了对它的控制,可能是一个不再可维护的代码库,而且还没有足够的程序员在它上面工作,但仍然知道它是如何工作的.

首先看一下Windows事件日志,应该对应用程序事件日志中的崩溃进行诊断.也许它会告诉你一些有用的东西.接下来要做的就是避免行使代理人的能力.将主EXE更改为32位进程.对于.NET应用程序,您可以使用Project + Properties,Build选项卡,将Platform目标从AnyCPU更改为x86.如果它仍然崩溃,那么至少你会更好地调试它,因为崩溃现在会发生在你的进程内部.重新安装Adobe Reader 可能会提供缓解,尽管完全卸载它现在变得非常有吸引力.

如果这只发生在用户的机器上,那么你肯定有一个讨厌的支持问题.请使用更改的平台目标设置为其提供更新.如果这没有帮助,那么你几乎坚持建议他们在Adobe找到支持或更新或卸载Reader.