Word2007:执行Selection.Find.Execute时未处理访问冲突异常

时间:2010-01-21 07:20:45

标签: c# ms-word access-violation

我在这个可怕而烦人的错误上阅读了很多帖子:“访问冲突异常未得到处理”。但只有一篇关于Word2007和提升命令“Selection.Find.Execute”的帖子。建议的解决方案是重新安装Word2007,这有点小事!

我试着解释一下我的环境。

我有一个使用WinForms用C#编写的应用程序,并通过InteropServices(word.dll)调用Word在Word中创建新文档(提升Word2007实例)。所有代码都在.NET Framework 3.5上运行。在C#代码中,我创建了文档,然后我搜索了一些代替它的东西。

该程序仅在某些计算机上引发引用错误,而在其他计算机上正确运行该程序。

这是代码段:

WordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
WordApp.Visible = false;
...
this.copDoc = WordApp.Documents.Add(ref template,
                                            ref missing,
                                            ref missing,
                                            ref isVisible);

                this.copDoc.Activate();
...
WordApp.Selection.Find.Execute(ref textData, ref oMissing, ref oMissing, ref oMissing, ref oMissing,ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

if (WordApp.Selection.Find.Found)
{
    Range r = WordApp.Selection.Range;
    r.Text = DateTime.Today.ToLongDateString();
}
...

当代码以粗体执行时,会引发“访问冲突”异常,并显示消息“尝试读取或写入受保护的内存。这通常表示其他内存已损坏。”。如果我对此代码发表评论,那么文档就会被创建,这可能意味着异常与整个Word无关,而只是在其中的一些特殊配置上。

以下是例外:

'EdAg.exe': Loaded 'C:\Windows\assembly\GAC\Microsoft.Office.Interop.Word\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll', Binary was not built with debug information.
'EdAg.exe' (Managed): Loaded 'C:\Windows\assembly\GAC\Microsoft.Office.Interop.Word\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll'
First-chance exception at 0x45c7a6f3 in EdAg.exe: 0xC0000005: Access violation.
First-chance exception at 0x6b815095 in EdAg.exe: 0xC0000005: Access violation reading location 0x45c7a6f3.
First-chance exception at 0x6b815095 in EdAg.exe: 0xC0000005: Access violation reading location 0x45c7a6f3.

有人可以建议我采用更合理的方式而不是重新安装Word 2007吗?

1 个答案:

答案 0 :(得分:0)

问题是机器上的问题是一致的,还是间歇性的?

如果一致,我不知道解决方案,但首先检查一下这些机器是否关闭了UAC(即添加到Vista中的东西,当它认为某些东西试图改变你的PC时会提示你)(或与工作相反)。

与此相关,当您尝试从未经过投放的应用程序与受影响的应用程序通话(例如,以“管理员”身份启动)时,您可以在使用COM时获得此类安全访问冲突。例如,如果有人以管理员身份启动您的应用程序(甚至可能从以管理员身份运行的VS),并且Word已经在运行NOT作为管理员,那么Windows将无法启动另一个Word实例,也不会让这两个人说话,所以COM会失败。