实施 IDTExtensibility2 并注册加载项是否不足以使其对 Office 可见?

Is Implementing IDTExtensibility2 And Registering An Add-In Not Enough For It To Be Visible To Office?

所以,我正在尝试为 64 位 MS Office 创建一个 COM 加载项(没有特别的应用程序,只是想让一些东西工作)。我并不是要为 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)下添加了注册表项。

加载项由 Visual Studio(已选中该框)自动注册 COM-Interop。 我也尝试在 HKCU\Classes\CLSID{94164866-CD9D-497A-9A8B-B476BE39749F} 下手动添加注册表项,但无济于事。

当我加载 Excel 时,加载项不在 COM 加载项对话框中并且没有任何反应(我的 OnConnection 方法是 MsgBox("Hello World!"))。

我没有使用任何类型的任何加载项框架(VSTO、ExcelDNA 等)。我以前用过这些,但非常想了解如何手动执行此过程。

我在这里错过了什么?

所以,在做了一些研究之后,这是我发现的:

  1. 没有 Visual Studio 为您注册 COM interop 类。
  2. 使用带有 /reg 参数的 RegAsm 工具让它为您生成 .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.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)帮助诊断问题并监控您的进度。