【问题标题】:How to develop Microsoft office word addin for 64bit version office in vs2010vs2010如何为64位版office开发微软office word插件
【发布时间】:2015-07-08 04:12:52
【问题描述】:

我在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 位办公室中也不起作用。在 64 位办公室中,我的插件显示在 InActive Application Add-Ins 下。我什至尝试启用它。

如何为 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 执行阶段)在 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 位应用程序。检查以下post to troubleshoot the addin loading - 检查点 1、2、3、4 和 7
  • @JeremyThompson 但现在我在 Root\Software\Microsoft\Office\application name\Addins\add-in ID 中获得了办公室插件的注册表详细信息,它在 32 位办公室中非常适合我,但它在 64 位办公室中不起作用(启用 gettinbg )..?可能是什么问题...?
  • 您是否在同一台 PC 上安装了两个版本的 Office?
  • @JeremyThompson 没有 32 位版本,它在我的系统中工作正常。但是朋友有 64 位版本的 office 并且插件在他的系统中不工作.. :(
  • 您需要澄清您的意思是“不工作”,例如它是或未在 Word 加载项中列出,它已列出但未加载/显示等。也请提供一些注册表项的 ProcessMonitor 日志,以显示加载项正在读取哪个或至少加载项在注册表中查找的位置。还请遵循本指南,您将正确地做所有事情:blogs.msdn.com/b/vsto/archive/2010/04/09/…

标签: c# com vsto office-interop office-addins


【解决方案1】:

试图加载格式不正确的程序

在 99% 的情况下,当在 64 位程序中引发此异常时,这仅意味着一件事。 “不正确的格式”是包含 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 中的 Deploying an Office Solution by Using Windows Installer 文章,该文章深入描述了所有必需的步骤。它声明如下:

    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 的位数并在适当的配置单元中创建密钥。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多