0

我阅读了很多关于这个可怕而烦人的错误的帖子:“访问冲突异常未处理”。但在 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 吗?

4

1 回答 1

0

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

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

与此相关的是,在使用 COM 时,当尝试从非特权应用程序与特权应用程序对话时(例如,启动“作为管理员”),您可能会遇到这样的安全访问冲突。例如,如果有人以管理员身份启动您的应用程序(甚至可能从 VS 以管理员身份运行),并且 Word 已经不是以管理员身份运行,那么 Windows 将无法启动另一个 Word 实例,并且不会让两者交谈,因此 COM 将失败。

于 2010-01-21T22:29:34.993 回答