C# Word.ApplicationClass.Activedocument突然出现异常

C# Word.ApplicationClass.Activedocument突然出现异常,c#,ms-word,office365,vsto,comexception,C#,Ms Word,Office365,Vsto,Comexception,我在Word VSTO插件项目中有一行代码,该项目过去可以工作,但现在突然不工作了: Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument; 在此之前,它只是返回了文档对象,我可以毫无疑问地读取和操作它。但现在它抛出了一个System.Runtime.InteropServices.COMException异常。“Word遇到了问题。”非常有用。该异常包含一个0x800

我在Word VSTO插件项目中有一行代码,该项目过去可以工作,但现在突然不工作了:

Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
在此之前,它只是返回了
文档
对象,我可以毫无疑问地读取和操作它。但现在它抛出了一个
System.Runtime.InteropServices.COMException
异常。“Word遇到了问题。”非常有用。该异常包含一个0x800A13E9的HRESULT,到目前为止,它对我也没有帮助。记性不好还是怎么了?Idk

新的行为似乎是在新年前夕开始的(不确定,因为我在过去几周没有使用外接程序),它是在安装外接程序时开始的,也就是说,代码中没有任何内容被更改、重新编译或重新安装以使其发生。我重新构建了这个项目,认为可能是证书过期了或是其他什么,但错误仍然存在

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

int numDocuments = Globals.ThisAddIn.Application.Documents.Count;
但是,当我使用
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属性时引发完全相同的异常。但是,我注意到在加载外接程序时还会抛出另外两个异常,并且在加载原始外接程序时也会抛出这些异常(以前可以正常工作):

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

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


现在我试着回滚到Office 365版本1810,即10月份发布的版本,这在以前确实有效,所以我认为这可能不是Office更新带来的问题。这是另外一回事。可能吧

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

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

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
}

好吧,回到Windows10的前一个版本(显然是1803)解决了这个问题,我现在无法复制它,所以我现在将把它标记为已解决

虽然我仍然不知道交易到底是什么,但至少我在研究中了解到,在Windows10中点击“检查更新”按钮,你会立即成为微软的测试人员。像他们一样,他们故意把你放在不稳定的更新列车上,没有任何通知,更不用说你将要安装更新的警告了。
无论如何,我希望他们能从我那得到一些很好的遥测数据,我花了很多很多时间尝试了我能想到的一切,这样当我被迫更新时,问题可能已经解决了。如果没有,我想我会回来再问同样的问题。至少我知道从哪里开始寻找原因。

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

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


VBA编辑器也不再适用于受影响的客户(没有安装外接程序)。打开过程中直接出现错误“Word遇到问题”(Visual Basic错误5097)。C#for Application.ActiveDocument中出现的相同错误Microsoft已修复该问题 Microsoft已发布Office更新来解决此问题

对于Office版本1902(Build 11328.20158),问题在我这边得到了解决

我明白了,外接程序会仔细检查是否至少存在一个文档,尤其是由于受保护的视图等原因。但是如果我添加
int y=Globals.ThisAddIn.Application.Documents.Count对于上面的最小示例,那里显然有一个文档(例如,使用新的空文档运行外接程序时y=1),因此,Office 365。。。和Windows版本,只是为了彻底?最近的Windows 10更新(最近几个月=最近)对互操作产生了一些负面影响,尽管我个人没有经历过这些影响…Windows 10 Pro版本1809,我认为是最新的。我已经通过繁琐的回滚方法尝试了六个最新版本的Office 365,并且完全删除了它和所有设置并重新安装,但错误仍然存在。因此,它可能与Windows更新有关。我想下一步我会尝试将其回滚,一旦我的Office备份并使用所有设置运行。Grr.Tip:如果您怀疑Office有问题,请尝试修复,而不是卸下并重新安装。修复更新/更正注册表设置,重新安装不会。要检查的另一件事是Word应用程序中打开的文档是否在受保护的窗口中“沙盒”。这个我
if(!LastActiveDocument){
// then only read any property of Active document
}