调用word interop时访问冲突异常

时间:2016-05-19 14:03:09

标签: c#

在发布使用c#.NET 4.0版(客户端配置文件)开发的应用程序后,我遇到了一个非常奇怪的问题

实际上,应用程序使用office interop打开一个word文件。文件被打开,当我开始在文件应用程序中键入(修改标题文本)时崩溃。我花了2-3天时间找到应用程序崩溃的原因。

以下是我从事件查看器收集的内容:

来源:.NET Runtime

Application: OES-PracticalClient.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
   at System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG ByRef, System.Runtime.InteropServices.HandleRef, Int32, Int32, Int32)
   at System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32)
   at System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
   at System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
   at System.Windows.Forms.Application.Run(System.Windows.Forms.Form)
   at Secure_Browser_CS_Version.Program.Main()

来源:应用程序错误

Faulting application name: OES-PracticalClient.exe, version: 1.0.0.4, time stamp: 0x5725e4d6
Faulting module name: unknown, version: 0.0.0.0, time stamp: 0x00000000
Exception code: 0xc0000005
Fault offset: 0x000d0000
Faulting process id: 0xe44
Faulting application start time: 0x01d1b1cc5b6d0f8d
Faulting application path: C:\Program Files\myorg\product name\OES-PracticalClient.exe
Faulting module path: unknown
Report Id: 029300ed-1dc0-11e6-a33d-080027beb5a6

Report.wer文件已上传here

通过事件日志很明显,由于堆栈跟踪at System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG ByRef, System.Runtime.InteropServices.HandleRef, Int32, Int32, Int32),它与interop的访问冲突相关(清除我,如果我错了),但是我无法确定导致崩溃的原因。特别是在我开始输入之后。

此外,在开发方面,测试机和客户端机器具有相同的操作系统和办公室版本,但在开发和测试环境中没有发生应用程序崩溃。

以下是操作系统和软件的详细信息。

操作系统版本

Windows 7企业服务包1(32位)

Office版:

Microsoft Word 2013(15.0.4701.1001)MSO(15.0.4701.1000)32位 Microsoft Office Professional Plus 2013的一部分

2 个答案:

答案 0 :(得分:0)

我希望这会有所帮助,但是我们在使用几乎相同的应用程序中的Excel COM库时遇到了类似的问题。我们将打开Excel文档并开始键入单元格,并抛出COM异常。这是间歇性的,直到我们注意到一种模式。

我们将其缩小到这样一个事实,即我们试图从代码中将数据加载到单元格中,并且在尝试键入单元格时仍然在运行。基本上,这是一个竞争条件,无论COM api做什么都不完整,它与用户打字冲突。

我认为Word和其他Office应用程序存在同样的问题。我们还没有解决这个问题,但是我们将寻找一种方法来识别当前是否正在编辑单元格,或者在我们的代码完成将数据加载到单元格之前阻止用户进行修改。

答案 1 :(得分:0)

如果您的代码中存在竞争条件,则通常会发生访问冲突异常,如果没有查看您的代码,我们就不知道是否存在此类问题。

如果您确定您的代码没有此类条件,则修复办公室安装很可能会解决问题。