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

本文关键字:处理 程序 失败 实例 COM 计算机 创建 | 更新日期: 2023-09-27 18:19:35

我正试图通过使用与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)).

引发错误的代码是:

object previewer = Activator.CreateInstance(type);

其中type是使用应用程序GUID检索的CCD_ 1。我在网上和SO上仔细查看了一下,虽然这个问题看起来很常见,但我一直没能找到解决方案。

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

您在诊断此故障时遇到问题,因为崩溃的不是您的代码。您可以使用Regedit找到故障排除程序,导航到HKLM''Software''Wow6432Node''Classes''CLSID并找到错误消息中报告的{guid}。你会看到它是一个由Adobe Reader提供的COM服务器,安装在我的机器上的C:''Program Files(x86)''Adobe''Reader 10.0''Reader''pdfprvhndlr.dll中。

同样值得注意的是,您会得到一个COM错误代码,该代码通常与进程外的COM服务器相关联,而注册的服务器在很大程度上是一个进程内服务器。当它被配置为使用代理时,就会发生这种情况。代理是一个单独的进程,当你从64位进程中使用它时,它会为服务器提供一个兼容的主页。这肯定会发生,查找AppId{guid},您会看到上面提到的DllSurrogate值。它是c:''windows''syswow64''prevhost.exe,32位预览主机进程。因此,诊断是进程崩溃了。

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

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

如果这种情况只发生在用户的机器上,那么您肯定会遇到严重的支持问题。请使用更改后的平台目标设置向他们提供更新。如果这没有帮助,那么你就只能建议他们在Adobe找到支持,或者更新或卸载Reader。