Word.ApplicationClass.Activedocument 突然出现异常

Exception from Word.ApplicationClass.Activedocument all of a sudden

我在 Word VSTO 加载项项目中有一行代码,它曾经可以工作但突然不再工作了:

Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;

在它按预期返回 Document 对象之前,我可以毫无问题地读取和操作它。但现在它抛出 System.Runtime.InteropServices.COMException 异常。 "Word has encountered a problem." 很有帮助。异常包含 0x800A13E9 的 HRESULT,到目前为止它也没有帮助我。内存不足还是怎么的?同上。

新行为似乎 是在除夕前后开始的(不确定,因为过去几周我没有使用加载项),并且开始了安装加载项时,即代码中没有任何更改、重新编译或重新安装以实现它。我已经重建了项目,认为可能是证书已过期之类的,但错误仍然存​​在。

可能值得注意的是,我仍然可以访问 Application 实例的其他属性。例如,这一行不会抛出异常:

int numDocuments = Globals.ThisAddIn.Application.Documents.Count;

但是当我用 foreach 遍历 Documents 集合时,它只是跳过循环,就好像计数为零一样。

我唯一能想到的是 Office (365) 的更新破坏了一些与 VSTO 相关的东西。但是我从哪里开始调试呢?


好的,所以我尝试创建一个新的 Word VSTO 加载项,更改 none 默认项目属性,但添加一个带单个按钮的功能区和以下方法:

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    try
    {
        var x = Globals.ThisAddIn.Application.ActiveDocument;
    }
    catch  (Exception ex)
    {
        ;
    }
}

它在获取 ActiveDocument 属性 时抛出完全相同的异常。但是我确实注意到加载加载项时又抛出了两个异常,并且在加载原始加载项时也会抛出它们(过去工作正常):

Exception thrown: 'System.Deployment.Application.DeploymentException' in System.Deployment.dll
Exception thrown: 'System.Security.Cryptography.CryptographicException' in Microsoft.VisualStudio.Tools.Applications.Hosting.dll

它们不会阻止加载项加载和 运行ning,但也许它们与问题有关?不知道去年问题出现前是不是也扔了

不过,我确实有几个 Excel 加载项仍然 运行 可以与相同版本的 VSTO、Visual Studio 和 Office 一起使用,而且它们不会抛出加载时出现以上两个异常。所以这个问题似乎是 Word 特有的。


现在我尝试回滚到 Office 365 版本 1810,即 10 月发布的版本,它以前确实有效,所以我认为这可能不是 Office 更新引入的问题。这是另一回事。应该是吧。

并不是说它真的对我有很大帮助,但至少我已经排除了这种可能性。应该是吧。

根据我的经验: 当时我关闭活动文档时,我正在根据活动文档刷新功能区菜单。 如果关闭文档是最后一个文档,我将无法阅读

中的任何 属性

Microsoft.Office.Interop.Word.Document 文件 = Globals.ThisAddIn.Application.ActiveDocument;

我和你遇到了同样的问题。

每当我关闭任何文档时我都会检查

if(Globals.ThisAddIn.Application.Documents.Count = 1){ 
LastActiveDocument = true;
}

当我刷新功能区菜单时,我检查

if(!LastActiveDocument){
// then only read any property of Active document
}

好吧,回滚到 Windows10 的前一个版本(在我的情况下显然是 1803)解决了这个问题,我现在无法重现它,所以我将其标记为暂时解决了。

虽然我仍然不知道 到底是什么 交易,但我至少在研究中了解到单击 Windows 中的 "Check for updates" 按钮10 立即让您成为 Microsoft 的 Beta 测试员。比如,他们故意把你放在不稳定的更新列车上,没有任何通知,更不用说警告你即将安装 他们 认为尚未准备好发布的更新还。

无论如何,我希望他们从我尝试了很多很多小时的所有我能想到的事情中得到了一些好的遥测数据,这样也许在我强制更新时问题就已经解决了。如果没有,我想我会回来再次问同样的问题。至少我会知道从哪里开始寻找原因。

问题似乎是由 Windows 2018 年 10 月 10 日更新(或 11 月)触发的。受影响的客户有特殊的 Windows 区域设置:示例:"English (Switzerland)".

解决方案:
将 Windows 区域设置格式更改为 "English (UK)" 或 "English (US)"

VBA 编辑器也不再为受影响的客户正常工作(没有安装加载项)。在打开过程中直接发生错误 "Word has encountered a problem"(Visual Basic 错误 5097)。 Application.ActiveDocument

在 C# 中发生的相同错误

Microsoft 已修复该问题
Microsoft 已发布 Office 更新来解决此问题。
使用 Office 版本 1902(内部版本 11328.20158),问题已在我这边得到解决。