Ошибки 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. Удаление потерянных подразделов вручную

Если скрипт PowerShell из шага 1 не удаляет потерянные подразделы, вы также можете проверка для потерянных записей вручную. Затронутое устройство может иметь потерянные подразделы, похожие на следующий пример:

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

Примечание. В этом примере — это строка, GUID относяющаяся к подразделу.

Подраздел будет иметь значение, указывающее на отсутствующий исполняемый файл Office в пути к файлу Program Files (x86). Например:

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

Также должен быть смежный подраздел, указывающий на правильное расположение 64-разрядных файлов программы.