Word.ApplicationClass.Activedocument突然发生异常

时间:2019-01-07 11:43:17

标签: c# ms-word office365 vsto comexception

我在Word VSTO加载项项目中有这行代码,该项目曾经可以工作,但突然不再使用:

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

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

新行为似乎是在除夕前后开始的(不确定,因为过去两周我没有使用该加载项),并且它是在该加载项启动时开始的已安装,即代码中的任何内容都没有更改,重新编译或重新安装即可实现。此后,我重新构建了该项目,以为证书可能已过期或什么原因,但错误仍然存​​在。

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

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

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

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


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

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

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

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


现在,我尝试回滚到10月份发行的Office 365版本1810,该版本以前确实可以使用,所以我认为可能不是Office更新引入的问题。这是另一回事。可能。

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

4 个答案:

答案 0 :(得分:4)

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

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

VBA编辑器也不再对受影响的客户正确运行(没有安装加载项)。打开期间直接发生了错误“ Word遇到问题”(Visual Basic错误5097)。 C#中出现的与Application.ActiveDocument相同的错误

答案 1 :(得分:0)

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

的任何属性

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

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

每当我关闭任何我检查的文件

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

当我刷新Ribbion菜单时,我会检查

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

答案 2 :(得分:0)

好吧,回滚到Windows 10的先前版本(显然是我的情况下为1803)已解决了该问题,目前我无法重现该问题,因此我将其标记为目前已解决。

>

尽管我仍然不清楚这笔交易到底是什么,但我至少在研究中了解到,单击Windows 10中的“检查更新”按钮可立即使您成为Microsoft的Beta测试人员。像这样,他们故意使您进入不稳定的更新过程,而没有任何通知,更不用说警告您即将安装他们尚未考虑发布的更新。< / p>

无论如何,我希望他们从我尝试了很多我想过的所有事情中得到了很多小时的遥测,以便在强制执行更新时可能会解决此问题。如果没有,我想我会再次提出同样的问题。至少我会知道从哪里开始寻找原因。

答案 3 :(得分:0)

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