Ошибки 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:
Способ 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-разрядных файлов программы.