使用Microsoft Office interop v.11与Windows 7,Microsoft Office 2010的应用程序

我inheritance了使用Visual Studio 2003和.NET 2.0构build的自定义应用程序。 它使用Microsoft Office PIA版本11(用于Office 2003),它最初运行在Windows XP上。 该应用程序依靠阅读Excel,Word和Powerpoint文件,以及Outlook读取.PST文件。

现在我试图让这个应用程序可以在一个64位的Windows 7机器上运行,这个机器是Office 2010的。大多数情况下,这个应用程序的工作原理 – 正确读取.PST文件并上传电子邮件和附件(以及正确的元数据)到Sharepoint。 只是在closures应用程序并尝试打开Microsoft Office 2010产品(Word,Excel,Powerpoint,Outlook)之后,这些程序往往会崩溃。 错误信息会显示“Microsoft _ _已停止工作”。

看事件查看器,日志通常是这样的:

Faulting application name: OUTLOOK.EXE, version: 14.0.6109.5005, time stamp: 0x4e79b881 Faulting module name: ntdll.dll, version: 6.1.7601.17514, time stamp: 0x4ce7ba58 Exception code: 0xc0000005 Fault offset: 0x0002e3fb Faulting process id: 0x1b20 Faulting application start time: 0x01cd5631d6ed41d9 Faulting application path: C:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE Faulting module path: C:\WINDOWS\SysWOW64\ntdll.dll Report Id: 2f11010e-c226-11e1-8b8d-9cb70de93ccf 

在做了大量的浏览之后,我猜测它与应用程序引用了Office 2003的PIA版本11,而我在这台计算机上的版本是针对Office 2010的PIA版本14.另外,我100%确定正是这个应用程序导致Office 2010应用程序崩溃,因为每次运行旧应用程序时都会发生这种情况。 重新启动电脑修复这些崩溃,但我宁愿不必每次运行此应用程序时重新启动!

实际上没有更新源代码,有什么我可以做的,以解决这个问题?

编辑:我现在有权访问Visual Studio Express 2010(C#),我有使用reflection器的源代码文件。 所以我想我可以开始做代码更改。 虽然我仍然收到很多错误,请参阅下面的回复…

听起来像传统的应用程序仍然拥有两个共享的组件,从而导致后来的程序崩溃。

如果您无法更改旧版应用程序,则没有太多可以做到。 像上面的注释一样debugging它是一个好方法。 但是,你真的需要能够改变应用程序。

你能得到源代码吗? 或者,这不是供应商“交付”的一部分?

我有一个类似的问题使用VB.Net 2012,Interop.Excel MSO 14.0和Windows 7,64位。 我能够通过目标.Net 4.0而不是4.5和64位cpu来消除这个问题。

我试图删除旧的Microsoft Office PIA版本11(对于Office 2003)的引用,并添加新的引用到当前的PIA版本14(对于Office 2010)。 我也将目标.NET更改为.NET 4 …现在,构build包时,我收到了许多奇怪的代码错误。

主文件将有

 using System; using Microsoft.Office.Interop.Excel; using Microsoft.Office.Interop.Outlook; using Microsoft.Office.Interop.PowerPoint; using Microsoft.Office.Interop.Word; 

但是当我试图build立这个项目的时候,我会得到所有这些错误

 Microsoft.Office.Interop.Word.System does not contain a definition for 'IO' The type name 'Drawing' does not exist in the type 'Microsoft.Office.Interop.Word.System' 

不知道为什么Visual Studio不读“系统”命名空间。 它看起来像Word命名空间重写了系统命名空间? 当我删除“使用Microsoft.Office.Interop.Word”命名空间时,所有的构build错误消失(除了实际使用Word的对象或方法,显然)