如何在VS2010中为64位版本的Office开发Microsoft Office Word插件

6

我已经在VS2010中为Word开发了一个插件。它在32位版本的Office中运行良好,但在64位版本的Office上无法正常工作。我搜索了很多资料,并发现

For 64-bit Root\Software\Microsoft\Office\application name\Addins\add-in ID
For 32-bit Root\Software\Wow6432Node\Microsoft\Office\application name\Addins\add-in ID

注册表信息路径。我尝试在64位中注册信息,但在64位的office中不起作用。在64位office中,我的插件显示为未激活的应用程序插件。我甚至尝试启用它。

如何开发和部署适用于64位office的插件..?

我收到了以下错误消息..!!

无法加载文件或程序集“xxxxx,Version=1.0.0.0,Culture=neutral, PublicKeyToken=null”或其某个依赖项。尝试以错误的格式加载程序。

************** 异常文本 ************** System.BadImageFormatException: 无法加载文件或程序集“xxxxx,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其某个依赖项。尝试以错误的格式加载程序。 文件名:“xxxxx,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”

 at MyWord.ThisAddIn.ThisAddIn_Startup(Object sender, EventArgs e)
   at MyWord.ThisAddIn.FinishInitialization()

在 Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.ExecuteCustomization.ExecutePhase(ExecutionPhases executionPhases) 处执行自定义内容; 在 Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.ExecuteCustomization.Microsoft.VisualStudio.Tools.Office.Runtime.Interop.IExecuteCustomization2.ExecuteEntryPoints() 处执行入口点。 警告: 程序集绑定日志记录已关闭。若要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。注意:启用程序集绑定失败日志记录会付出一定的性能代价。 若要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。


我认为你可能有点困惑,为了向后兼容,Wow64是为32位应用程序而设计的。请查看以下文章以解决插件加载问题 - 检查1、2、3、4和7号要点。 - Jeremy Thompson
@JeremyThompson,现在我已经在Root\Software\Microsoft\Office\application name\Addins\add-in ID中获得了我的注册表详细信息,它在32位的office中完美运行,但在64位的office中无法工作(启用)。可能是什么问题呢? - Dah Sra
你的电脑上有两个版本的Office吗? - Jeremy Thompson
@JeremyThompson,我这里安装的是32位的版本,在我的系统上可以正常工作。但是我的朋友安装的是64位的Office版本,插件在他的电脑上无法工作... :( - Dah Sra
您需要澄清“不起作用”的含义,例如它是否在Word加载项中列出,是否列出但未加载/显示等。此外,请提供一些ProcessMonitor日志以显示插件正在读取哪些注册表键或至少插件在注册表中查找的位置。同时请遵循此指南,您将正确地完成所有操作:http://blogs.msdn.com/b/vsto/archive/2010/04/09/deploying-com-add-ins-for-64-bit-office-using-visual-studio-saaid-khan-for-nathan-halstead.aspx - Jeremy Thompson
显示剩余2条评论
2个回答

4
尝试加载格式错误的程序
在64位程序中引发此异常时,在99%的情况下,只意味着一件事。 "格式不正确"是包含32位代码的DLL。这是无法正常工作的,64位程序只能加载64位DLL。
如果您使用C#编写该插件,则可以轻松解决此问题。右键单击“解决方案资源管理器”窗口中的项目,选择属性,生成选项卡。将“平台目标”设置为AnyCPU。如果您看到它,请取消选中“首选32位”复选框(VS2012及更高版本)。对于发布配置,重复此操作。
其他可能的解释:
  • 未安装.NET Framework的64位版本
  • 使用C++ / CLI语言编写代码,必须构建x64版本
  • 依赖于32位未经管理的DLL
  • 意外加载了错误的DLL
您需要SysInternals的Process Monitor来追踪此类问题。跟踪显示Office程序正在查找哪些DLL以及它查找DLL的目录。这将是一个大跟踪,从跟踪底部向后工作。

2
请查看MSDN中的使用Windows Installer部署Office解决方案文章,该文章详细描述了所有必需的步骤。其中提到:

32位

  HKEY_LOCAL_MACHINE\SOFTWARE(32-Bit)\Microsoft\Office\Excel\Addins\SampleCompany.ExcelAddIn

64位
 HKEY_LOCAL_MACHINE\SOFTWARE(32-Bit)\Microsoft\Office\Excel\Addins\SampleCompany.ExcelAddIn
 HKEY_LOCAL_MACHINE\SOFTWARE(64-Bit)\Microsoft\Office\Excel\Addins\SampleCompany.ExcelAddIn

64位Windows的安装程序需要两个注册表路径,因为用户可能在运行64位Windows的计算机上运行32位和64位版本的Office。

但是,在自定义操作中,您可以检测已安装的MS Office的位数,并在适当的注册表项中创建密钥。


你分享的链接是基于instaSheild的,但我正在使用WIX安装程序。 - Dah Sra
好的文章,OP很幸运,他有VS2010,可以使用设置项目。+1 - Jeremy Thompson
在左上角有一个链接,可以切换文章到VS2010。请参阅使用Windows Installer部署Visual Studio 2010 Office解决方案 - Eugene Astafiev
@EugeneAstafiev已经在这两个路径中输入了注册表值,但是64位Office的插件仍然无法工作。 - Dah Sra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接