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

症状

在将 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 中 是特定于子项的字符串。

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

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

还应有一个指向正确 64 位 Program Files 位置的相邻子项。