Excel interop在Office 2007的机器上工作,但在Office 2010的机器上失败

我有一个C#WPF(.NET 4.0)应用程序使用Excel互操作来从Excel文件中读取数据。

当我在我的开发机器上运行这个应用程序,它有Excel 2007,它工作正常。 当我在其上安装了Excel 2010的另一台计算机上运行它时,失败,并显示以下错误消息:

System.Runtime.InteropServices.COMException(0x80040154):由于以下错误,检索具有CLSID {00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败:80040154类未注册(exception来自HRESULT:0x80040154(REGDB_E_CLASSNOTREG ))。

尝试创buildMicrosoft.Office.Interop.Excel.Application对象时发生失败,如下所示:

 var app = new Application(); 

我的项目有一个参考Microsoft.Office.Interop.Excel.dll (版本14.0.0.0,运行版本v2.0.50727),它位于:

C:\ Program Files \ Microsoft Visual Studio 10.0 \ Office \ PIA \ Office14 \ Microsoft.Office.Interop.Excel.dll Visual Studio工具

我试图运行与引用的DLL上的默认设置的应用程序:

  • 复制本地=假
  • embedded互操作types=真
  • 特定版本=真

我也尝试在引用的dll上使用以下设置运行应用程序:

  • 复制本地=真
  • embeddedInterop Types = False
  • 特定版本=真

但在使用Office 2010的计算机上,这两种尝试都没有奏效。

其他说明:Office 2010的机器是64位W / Windows 7.我的开发机器是Windows XP的X86。

什么是导致“类未注册”的例外,我该如何解决?

编辑

为了回应Alex的回答,我尝试将应用程序构build为Any CPU,X86和X64,但没有任何区别。 我仍然得到相同的“类未注册”错误。

编辑2

刚刚在Office 2010上的32位计算机上尝试了该应用程序。没有错误。 因此,特定的机器可能会出现问题,或者可能是64位和Office 2010的组合。

编辑3

好的,现在我已经使用Office 2010在不同的64位计算机上对其进行了testing。再次没有错误。 我认为这意味着特定的机器有问题,这不是我的软件的错误。 啊编程。

初步答案:我的软件没有问题,在特定机器上的设置有问题。

编辑

我刚刚发现了一些可能是问题的根源。 有问题的机器有Office,但它设置为点击运行 (运行在互联网上),而不是基于MSI (从EXE运行)。 这意味着某些registry设置,DLL,组件等不可用于Microsoft.Office.Interop.Excel ,因此失败。

编辑2

这绝对是问题。 刚刚升级到完整的基于MSI的Office安装,一切都很好。

编辑3

将此作为一个错误添加到Microsoft Connect:

https://connect.microsoft.com/VisualStudio/feedback/details/672276/excel-interop-fails-on-machine-where-office-is-installed-as-click-to-run#details