Внедрения IDTExtensibility2 и регистрации надстройки недостаточно, чтобы она была видна в Office?

Итак, я пытаюсь создать надстройку COM для 64-битного MS Office (конкретно без приложения, просто пытаюсь что-то сделать). Я не пытаюсь сделать надстройку для VBE, просто что-то для самого приложения Office. Я реализовал IDTExtensibility2 следующим образом (верхняя часть файла):

<Guid("94164866-CD9D-497A-9A8B-B476BE39749F"), 
ProgId("COM_Add-In_Test.Connection"), 
ComDefaultInterface(GetType(IDTExtensibility2)), 
ClassInterface(ClassInterfaceType.None), ComVisible(True)>
Public Class Connection
    Implements IDTExtensibility2

Я добавил записи реестра в HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Excel\Addins\COM_Add-In_Test.Connection (FriendlyName, Description и LoadBehavior).

Надстройка автоматически регистрируется для COM-Interop в Visual Studio (флажок установлен). Я также пытался добавить записи реестра вручную в HKCU\Classes\CLSID{94164866-CD9D-497A-9A8B-B476BE39749F}, но безрезультатно.

Когда я загружаю Excel, надстройки нет в диалоговом окне надстроек COM, и ничего не происходит (Мой метод OnConnection — MsgBox (Hello World!).

Я не использую какие-либо надстройки (VSTO, ExcelDNA и т. д.). Я использовал их раньше, но очень хотел бы понять, как сделать этот процесс вручную.

Что мне здесь не хватает?


person ScottK    schedule 30.04.2021    source источник
comment
64-битная версия офиса? stackoverflow.com/questions/9495192/   -  person Hans Passant    schedule 01.05.2021
comment
Отредактировал вопрос, чтобы ответить на этот комментарий.   -  person ScottK    schedule 02.05.2021
comment
В вопросе, связанном с вопросом, на который вы разместили ссылку, была еще одна ссылка на исходный код AddInSpy. Я клонировал репозиторий и запустил его, и он говорит, что моя регистрация CLSID либо неполная, либо недействительная. Я сосредоточу свои усилия на этом. Сталкивались ли вы с какими-либо ресурсами, подробно описывающими, как именно должны выглядеть эти записи реестра?   -  person ScottK    schedule 02.05.2021


Ответы (1)


Итак, проведя некоторые исследования, вот что я обнаружил:

  1. Не заставляйте Visual Studio регистрировать для вас классы COM-взаимодействия.
  2. Используйте инструмент RegAsm с аргументом /reg, чтобы он сгенерировал для вас файл .reg.
  3. Отредактируйте файл .reg и замените ссылки на HKEY_CLASSES_ROOT ссылками на HKEY_LOCAL_MACHINE\SOFTWARE\Classes, если для установки не требуются права администратора. Пример:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{YOUR_GUID}]
@="YOUR_PROG_ID"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{YOUR_GUID}\Implemented Categories]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{YOUR_GUID}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{YOUR_GUID}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="YOUR_PROG_ID"
"Assembly"="YOUR_ASSEMBLY_FULL_NAME"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///PATH_TO_YOUR_DLL"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{YOUR_GUID}\InprocServer32\1.0.0.0]
"Class"="YOUR_PROG_ID"
"Assembly"="YOUR_ASSEMBLY_FULL_NAME"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///PATH_TO_YOUR_DLL"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{YOUR_GUID}\ProgId]
@="YOUR_PROG_ID"
  1. Используйте надстройку-шпион (доступно здесь: https://github.com/NetOfficeFw/AddInSpy), чтобы помочь диагностировать проблемы и следить за своим прогрессом на этом пути.
person ScottK    schedule 04.05.2021