我继承了使用Visual Studio 2003和.NET 2.0构建的自定义应用程序。它使用Microsoft Office PIA版本11(适用于Office 2003),最初在Windows XP上运行。该应用程序依赖于读取Excel,Word和Powerpoint文件,以及用于读取.PST文件的Outlook。
现在我正在尝试让这个应用程序在具有Office 2010的64位Windows 7计算机上运行。在大多数情况下,应用程序可以正常工作 - 它正确读取.PST文件并上传电子邮件和附件(连同正确的元数据)到Sharepoint。只是在我关闭应用程序并尝试打开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#),并且我有使用Reflector的源代码文件。所以我想我可以开始进行代码更改了。我仍然遇到很多错误,请参阅下面的回复......
答案 0 :(得分:3)
听起来遗留应用仍然存在两个共享组件,从而导致后续程序崩溃。
如果你无法改变遗留应用程序,那么你就没有多少。像上面的评论一样调试它是一个好方法。但实际上你需要能够改变应用程序。
你能得到源代码吗?或者这不是供应商“交付”的一部分?
答案 1 :(得分:2)
我使用VB.Net 2012,Interop.Excel for MSO 14.0和Windows 7,64位也遇到了类似的问题。我能够通过目标.Net 4.0而不是4.5和64位cpu消除问题。
答案 2 :(得分:0)
我尝试删除对旧版Microsoft Office PIA版本11(适用于Office 2003)的引用,并添加对当前PIA版本14(适用于Office 2010)的新引用。我还将目标.NET更改为.NET 4 ...我在构建软件包时遇到了很多奇怪的代码错误。
主文件有
using System;
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Outlook;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Interop.Word;
但是当我尝试构建项目时,我会得到所有这些错误
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不会读取“System”命名空间。看起来Word命名空间覆盖了System命名空间?当我删除“使用Microsoft.Office.Interop.Word”命名空间时,所有构建错误都会消失(显然实际使用Word的对象或方法除外)