如何对无法加载的 VSTO 插件进行故障排除?

Posted

技术标签:

【中文标题】如何对无法加载的 VSTO 插件进行故障排除?【英文标题】:How to troubleshoot a VSTO addin that does not load? 【发布时间】:2011-06-07 19:32:51 【问题描述】:

我的 VSTO Outlook 加载项突然停止在一台客户计算机上运行(它无法加载,没有错误消息),我无法解决问题。机器是 Windows 7 x86,Outlook 2007。插件是用 Visual Studio 2008 编写的,并使用带有 2003 PIA 的 VSTO 2005(因为我们还需要支持 Outlook 2003)。它在其他机器上运行良好。

这是我试图获得有用的故障排除输出的内容:

Add the VSTO_SUPPRESSDISPLAYALERTS environment variable (set to 0)。 使用管理权限启动 Outlook。 查看事件日志。

什么都没有。加载项不会在没有给出原因的任何指示的情况下加载。我还检查了“通常的嫌疑人”(CAS 策略、安装的 PIA、注册表中的 LoadBehavior、重新安装 VSTO 和加载项)。

其他一些观察:

注册表中的LoadBehavior 保持在3。 加载项在 Outlook 中显示为“已禁用”。在“COM 加载项”中选中它的复选框什么都不做(没有错误,第二次输入表单时会再次清除复选框)。 它在其他客户机器上运行良好,在这台机器上运行良好。 (不,客户无法告诉我他的机器发生了什么变化。) 我的代码顶部有一条Trace.WriteLine 消息(ThisAddIn_Startup 处理程序中的第一行),但没有到达(我检查了DebugView)。因此,不加载的原因不是我的加载项异常,而是 VSTO 加载加载项失败或 Outlook 加载 VSTO 失败。

我真的很想强制 Outlook 和/或 VSTO 告诉我出了什么问题,而不是更多的随机调试(“试试这个...”、“试试那个...”) ,即在尝试启用加载项时给我一个有用的错误消息,而不是什么都不做。有任何想法吗?

【问题讨论】:

这个问题是关于 Outlook 加载项的 VSTO,但问题是一般的 Office 问题。这个问题及其答案帮助我使用了 Excel 2010 加载项。 +1 向我介绍了 VSTO_SUPPRESSDISPLAYALERTS 环境变量 @Heinzi - 感谢您提出这个问题,我添加了大多数其他使人们绊倒的解决方案。 Disabled 很容易修复,除非它发生在 citrix... 对于将 LoadBehavior 更改为 0 的 Outlook 2007,另请参阅:***.com/questions/7691372/… 您是否检查了清单文件是否存在于正确的位置?还要检查该插件的注册表项是否存在于 HKLM 和 HKCU 两个分支中。 【参考方案1】:

这里有更多关于 RobertG5 解决方案的详细信息(评论太长了):

问题在于 Outlook 已硬禁用该加载项。据我所知,这与“通常的”不加载场景不同。实现这一点的关键是注意插件没有显示在 Inactive Application Add-Ins 下,而是显示在 Disabled Application Add-Ins 下。这会有所不同:在后一种情况下,只需进入 COM-AddIn 屏幕并勾选复选框就不会执行任何操作。 (我想一个很好的消息框“您无法加载此加载项,因为它已被硬禁用”会问太多... sigh。)

那么,如何重新启用硬禁用的加载项?

    管理框中,将COM Add-ins更改为Disabled Add-ins,然后点击Go。 选择插件并点击启用。点击关闭

好的,现在可以再次加载插件了:

    管理框中,将Disabled Add-ins更改为COM Add-ins,然后点击Go。 选中已禁用加载项旁边的复选框。点击确定

参考:http://msdn.microsoft.com/en-us/library/ms268871.aspx

【讨论】:

太棒了。谢谢你的参考。我补充说,对于 Microsoft Office 2003 应用程序,禁用插件列表位于“帮助-关于”菜单中。【参考方案2】:

您是否尝试再次启用该插件?它在禁用队列中后不会运行。从禁用的加载项屏幕重新启用它后,您可以选中 COM-AddIn 屏幕中的框以加载它,然后应该提示您更多详细信息,因为您设置了关于可能发生的事情的 VSTO_SUPPRESSDISPLAYALERTS 变量首先。

【讨论】:

这正是问题所在:我在 COM-AddIns 屏幕中选中该框,单击“确定”,重新进入 COM-AddIns 屏幕,该框再次被取消选中。不会出现任何错误消息。 我的意思是检查禁用的插件队列(不是你未检查的插件)。在加载项类型下拉列表中的最后一项。它就像是潜在不良插件的炼狱。 +1,你是对的,当然。很抱歉第一次读错了你的答案(反对票不是来自我,顺便说一句)。我会将你的答案标记为答案,但我也会在此处保留我的答案,因为它有点冗长。 如果插件崩溃,它将被添加到禁用的插件中。我不确定插件是否崩溃了太多次,或者 Outlook 确定它们的崩溃类型足够严重,无论如何你必须先从那里删除它。否则尝试启用它是行不通的。 如果您仍然遇到问题,请尝试将应用程序中的所有内容都包装在 try catch 中。【参考方案3】:

我知道这是旧的,但由于各种原因,我最近一直在对无法加载的 Office 加载项进行故障排除。

它消耗了大量时间,所以我想我会分享,所以如果您的加载项无法加载或不可见等,请尝试这些解决方案。

1.加载项未加载。

未加载。加载 COM 加载项期间发生运行时错误。

问题是由于缺少 .Net 框架 3.5 或 4.0。

注意:如果 Office 版本是 64 位 (x64),我只需要 .Net 4.0。但是,如果 Office 版本是 32 位 (x86),我在安装 .Net 4.0 后也会收到错误消息。按照这个article,我安装了.Net 3.5,然后它在x86 Office 上运行了!

另外需要安装VSTO Runtime 3.0 form here。

2。加载项未加载。

仔细检查您是否正确拼写了注册表项。偶尔我会输入 Behavior,但在美式拼写中是 Behavior,因此请仔细检查“LoadBehavior”

还要确保“LoadBehavior”为 3,有关值列表,请参阅 http://msdn.microsoft.com/en-us/library/vstudio/bb386106.aspx#LoadBehavior

3.插件不可见。

您可以通过转到 Excel > 文件 > 选项 > 加载项 > 选择管理下拉列表并将其设置为 COM 加载项 > 单击 GO 来使加载项可见​​。在 COM 加载项对话框中,确保已勾选加载项。

4.加载项已禁用。

或者,加载项可能会因为已被禁用而被隐藏。您可以通过转到 Excel > 文件 > 选项 > 加载项 > 选择管理下拉列表并将其设置为禁用并单击执行来启用加载项。选择已禁用的加载项,然后单击启用。

5. ExcelDNA 用户定义公式未正确呈现

您看到的不是单元格值:#NAME?

设置以下注册表项:

HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\options\OPEN:

使用正确的值:

/R "C:\Program Files\XYZ\XYZ Addin\ExcelDNA.XYZAddIn.xll"

6. Excel 在显示消息框后挂起

重新开启应用设置:

xlApp.ScreenUpdating = true;
xlApp.DisplayAlerts = true;
xlApp.Calculation = XlCalculation.xlCalculationAutomatic;
xlApp.UserControl = true;
xlApp.EnableEvents = true;

7.进一步的故障排除

通过在系统环境变量中添加以下内容来启用 VSTO 日志文件:

NAME: VSTO_LOGALERTS
VALUE: 1

可能存在异常错误,这就是您的加载项未加载的原因。

您可以在 VSTO 日志记录和警报上查看 this source for more info,但本质上您可以根据需要更改两个环境变量值:

显示 VSTO 警报提示

要在消息框中显示每个错误,请设置 VSTO_SUPPRESSDISPLAYALERTS 变量为 0(零)。你可以压制 通过将变量设置为 1(一)来发送消息。

将 VSTO 警报记录到日志文件

要将错误写入日志文件,请设置 VSTO_LOGALERTS 变量 到 1(一)。

Visual Studio Tools for Office 在文件夹中创建日志文件 包含应用程序清单。默认名称是 .manifest.log。 要停止记录错误,请将变量设置为 0(零)。

【讨论】:

4)。加载项被禁用。 -> 那是为我做的! Manage 需要设置为 Disabled Items 对我来说很重要。谢谢! 出色的答案。一旦我发现了环境。停止抑制错误的变量,我可以看到我的加载项正在崩溃,缺少“SQLite.Interop.dll”。非常非常感谢。【参考方案4】:

我建议使用名为 AddinSpy 的 Microsoft 工具来诊断加载项问题。

【讨论】:

在尝试了各种各样的东西之后,这个工具对我有用。结果表明正在加载插件,但未加载其他一些依赖项(dll),因为“此程序集是由比当前加载的运行时更新的运行时构建的,无法加载”。 AddinSpy 帮助我收到了该错误消息。 这是一个死链接,真是令人失望。我认为这会帮助我解决我的问题。 您可能想要搜索下载位置。这是一个页面,可以查看它的外观:msdn.microsoft.com/en-us/library/cc984533%28v=office.12%29.aspx 如果您不介意自己构建,可以从 GitHub 获得 AddInSpy 的(非官方)源:github.com/NetOfficeFw/AddInSpy【参考方案5】:

对我来说很有趣,我尝试重新启动。为我修好了。但是,它为我修复它的原因是我隐藏了一个流氓 Excel.exe。由于此其他 excel 应用程序正在运行(我正在将 MSAccess 应用程序迁移到 VSTO),插件没有启动,因此 Access 隐藏了一个自动化应用程序。

简而言之,如果您的插件没有启动,快速检查就是确保没有其他 Excel 应用程序正在运行。当然,这仅适用于您尝试安装/启动并运行全新的设备时。

(我使用了这个链接) https://www.add-in-express.com/creating-addins-blog/2012/11/13/wix-installation-vsto-office-addin/

【讨论】:

【参考方案6】:

这里还有另一种可能性,即为什么即使设置了上述环境变量,您也没有收到反馈。我发现如果您在安装后遇到此错误(不是以前一直在工作的 VSTO),您还应该仔细检查注册表和 “Manifest” 条目(如果有的话)。

虽然 Jeremy Thompson 在他的第二个要点中指出了注册表,但他没有显示可能是您的注册表设置一部分的 Manifest 条目。如果您的清单条目未指向正确的路径和文件,它将显示在加载项列表中,并带有 “未加载” 条目。

这里我们看到一个错误的条目,它只指向 VSTO 文件,没有路径。

这将导致您的 AddIn 看起来像是加载了错误,但没有错误弹出并出现在您面前,让事情变得令人沮丧。所以它看起来像下面这样,注意下面的位置条目也没有显示路径。

通过输入正确的路径和文件名来更正条目,它将解决这个问题。

我认为没有错误是因为您最初没有指向任何内容,因此它列出了 AddIn,因为它在注册表中,即使没有要加载的内容。

【讨论】:

【参考方案7】:

最后我哄着 Word 告诉我:

    Microsoft.VisualStudio.Tools.Applications.Runtime.CannotCreateStartupObjectException: 
Could not create an instance of startup object blaghblagh ---> 
System.TypeInitializationException: The type initializer for 'foo' threw an exception. ---> 
System.IO.FileNotFoundException: Could not load file or assembly 'blah' or one of its dependencies. 
The system cannot find the file specified.

之后,多亏了 [1],FusLogvw 很快为我解决了这个问题。

[1]Could not load file or assembly or one of its dependencies

【讨论】:

以上是关于如何对无法加载的 VSTO 插件进行故障排除?的主要内容,如果未能解决你的问题,请参考以下文章

对远程 jquery 插件请求进行故障排除

如何对 PhoneGap Build 的 Localytics 安装进行故障排除?

如何对 Web API 项目进行故障排除?

如何对事件日志中的 .NET 2.0 错误报告消息进行故障排除?

对 Cron 中的 PM2 重启进行故障排除

对无法连接到 MySQL 的 Spring Boot 应用程序进行故障排除