Word.ApplicationClass.Activedocument 突然出现异常



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

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

在它只是按预期返回Document对象之前,我可以毫无问题地读取和操作它。但现在它抛出了一个System.Runtime.InteropServices.COMException异常。"消息遇到了问题。"非常有帮助。该异常包含 HRESULT 0x800A13E9,到目前为止也没有帮助我。内存不足还是什么?艾德克。

新行为似乎是在新年前夜左右开始的(不确定,因为我过去几周没有使用加载项),并且在安装加载项时开始,即代码中的任何内容都没有更改、重新编译或重新安装以实现它。此后,我重建了该项目,认为可能是证书已过期或其他原因,但错误仍然发生。

可能值得注意的是,我仍然可以访问应用程序实例的其他属性。例如,此行不会引发异常:

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

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

我唯一能想到的是Office(365)的更新破坏了与VSTO相关的内容。但是我什至从哪里开始调试它?


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

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

它在获取活动文档属性时引发完全相同的异常。但是,我确实注意到加载加载项时还抛出了两个异常,并且在加载原始加载项(以前工作正常)时也会抛出它们:

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

它们不会阻止加载项加载和运行,但也许它们与问题有关?我不知道它们是否也是去年问题出现之前被扔掉的。

但是,我确实有几个Excel加载项仍然可以在相同版本的VSTO,Visual Studio和Office上运行良好,并且在加载时不会抛出上述两个异常。因此,该问题似乎特定于Word。


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

并不是说它真的对我有多大帮助,但至少我已经排除了这一点。可能。

该问题似乎是由Windows 10 October 2018 Update(或11月)触发的。受影响的客户具有特殊的 Windows 区域设置:示例:"英语(瑞士)"。

解决方案:
将 Windows 区域设置格式更改为"英语(英国)"或"英语(美国)">

VBA 编辑器也不再为受影响的客户正常工作(未安装加载项)。错误"Word 遇到问题"(Visual Basic 错误 5097)在打开过程中直接发生。在 C# for Application.ActiveDocument 中发生的相同错误

好吧,回滚到Windows 10的先前版本(显然是1803)解决了这个问题,目前我无法重现它,所以我现在将其标记为已解决。

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

无论如何,我希望他们从我尝试我能想到的一切中获得一些良好的遥测数据,以便在强制更新时解决问题。如果没有,我想我会再次问同样的问题。至少我会知道从哪里开始寻找原因。

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

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

我和你一样面临同样的问题。

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

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

当我刷新里比恩菜单时,我会检查

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

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

最新更新