Office 体系结构迁移后的 COM 和 .NET 错误

症状

将 Microsoft Office 体系结构从 32 位迁移到 64 位后,如果使用 COM 应用程序或.NET Framework客户端,则会遇到错误。 这些可能的错误包括但不限于以下内容:

  • TYPE_E_CANTLOADLIBRARY

  • TYPE_E_LIBNOTREGISTERED

  • TYPE_E_ELEMENTNOTFOUND

如果 COM 应用程序或 .NET 客户端作为 32 位进程运行,则通常会发生错误。

示例

在 86 位 PowerShell 中运行以下代码时,可能会出现这些错误:

$xl = New-Object -ComObject Excel.Application

$xl.Visible = $True

原因

这些错误是由迁移创建的孤立注册表子项引起的。

解决方案

若要解决此问题,请使用以下方法之一。

方法 1:自动删除孤立的子项

若要检测并删除孤立的子项,请从以下 GitHub 位置运行此脚本:

Office TypeLib 修正

方法 2:手动删除孤立的子项

如果步骤 1 中的 PowerShell 脚本未删除孤立的子项,还可以手动为孤立项检查。 受影响的设备可能有类似于以下示例的孤立子项:

HKEY_CLASSES_ROOT\WOW6432Node\TypeLib\GUID\1.9\0\Win32

注意:在此示例中, GUID 是特定于子项的字符串。

子项将具有一个值,该值指向程序文件 (x86) 文件路径中缺少的 Office 可执行文件。 例如:

C:\Program Files (x86) \Microsoft Office\Root\Office16\EXCEL.EXE

还应有一个指向正确 64 位程序文件位置的相邻子项。