【发布时间】:2019-01-07 11:43:16
【问题描述】:
我在 Word VSTO 加载项项目中有这行代码,它曾经可以工作,但突然不再工作了:
Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
在它刚刚返回 Document 对象之前,我可以毫无问题地读取和操作它。但现在它抛出了一个System.Runtime.InteropServices.COMException 异常。 “Word遇到问题了。”非常有帮助。异常包含 0x800A13E9 的 HRESULT,到目前为止也没有帮助我。内存不足还是什么?同理。
新行为似乎是在新年前夜左右开始的(不确定,因为过去几周我没有使用该插件),并且它是在插件期间开始的已安装,即代码中没有任何内容被更改、重新编译或重新安装以实现它。此后我重建了项目,认为证书可能已过期或其他原因,但错误仍然存在。
值得注意的是,我仍然可以访问应用程序实例的其他属性。例如,这一行不会抛出异常:
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)
{
;
}
}
它在获取 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 特有的。
现在我尝试回滚到 Office 365 版本 1810,即 10 月发布的版本,该版本之前确实有效,所以我认为这可能不是 Office 更新引入的问题。这是另一回事。大概吧。
并不是说它真的对我有多大帮助,但至少我已经排除了这种可能性。大概吧。
【问题讨论】:
-
那么,Office 365... 和 Windows 版本,只是为了彻底?最近的 Windows 10 更新(最近几个月 = 最近)对 Interop 产生了一些负面影响,尽管我个人还没有经历过它们......
-
Windows 10 Pro 版本 1809,我相信它是最新的。我已经通过繁琐的回滚方法尝试了 Office 365 的六个最新版本,并且还完全删除了它以及所有设置并重新安装,但错误仍然存在。因此,它可能与 Windows 更新有关。我想接下来我会尝试将其回滚,一旦我备份了 Office 并使用所有设置运行。 Grr.
-
提示:如果您怀疑 Office 尝试修复,请不要删除并重新安装。修复更新/更正注册表设置,重新安装不会。
-
要检查的另一件事是在 Word 应用程序中打开的文档是否是“沙盒” - 在受保护的窗口中。这不应该是现在才发生的事情,因为它是在五年多前推出的,但我想我最好提一下......
-
感谢您的建议,但我已经尝试修复。虽然我认为沙盒可能与它有关,但 Documents 集合中肯定存在一个文档,而且它绝对不是受保护的视图或只读模式等。此外,我相信如果这是原因引发的异常会有所不同。
标签: c# ms-word office365 vsto comexception