如何排除 VSTO 插件无法加载的问题?

81
我的VSTO Outlook插件在一个客户的电脑上突然停止工作(它不会加载,也没有错误消息),我现在被卡在了故障排除中。该机器是Windows 7 x86,Outlook 2007。该插件使用Visual Studio 2008编写,使用带有2003 PIAs的VSTO 2005(因为我们还需要支持Outlook 2003)。在其他机器上它完美地运行。
以下是我尝试获取有用的故障排除输出的方法:
- 添加VSTO_SUPPRESSDISPLAYALERTS环境变量(设置为0)。 - 以管理员权限启动Outlook。 - 查看事件日志。
什么都没有。插件无法加载,也没有任何原因的提示。我还检查了“常见嫌疑人”(CAS策略,已安装的PIA,在注册表中的LoadBehavior,重新安装VSTO和插件)。
一些其他观察结果:
  • 注册表中的LoadBehavior保持为3
  • 插件在Outlook中显示为"已禁用"。在"COM加载项"中选中复选框什么也不会发生(没有错误,在第二次进入时复选框被清除)。
  • 它在其他客户机器上运行得非常好,而且它在这台机器上也完美地运行。 (不,客户无法告诉我他的机器发生了什么变化。)
  • 我的代码最顶部有一个Trace.WriteLine消息(在ThisAddIn_Startup处理程序的第一行),但没有到达(我用DebugView检查过)。因此,无法加载插件的原因不是我的插件中的异常,而是VSTO无法加载插件或Outlook无法加载VSTO。

与其进行更多的随机调试(“尝试这个...”,“尝试那个...”),我真的想强制Outlook和/或VSTO告诉我出了什么问题,即给我一个有用的错误消息,而不是在尝试启用插件时什么也不做。有什么想法吗?


9
这个问题涉及到用于 Outlook-Add-In 的 VSTO,但问题是一个通用的 Office 问题。该问题及其答案对我在 Excel 2010 Add-In 中有所帮助。 - Dirk Brockhaus
2
+1 是为了向我介绍 VSTO_SUPPRESSDISPLAYALERTS 环境变量表示感谢。 - Andy McCluggage
1
@Heinzi - 感谢您提出这个问题,我添加了大多数其他会使人们犯错的解决方案。除非在 Citrix 上发生,否则禁用的解决方案很容易修复... - Jeremy Thompson
请参考以下内容了解如何将Outlook 2007的LoadBehavior更改为0:https://dev59.com/-VzUa4cB1Zd3GeqPzAQW - Alexandru
你有检查清单文件是否位于正确的位置吗? 还要检查该插件的注册表项是否同时存在于HKLM和HKCU两个分支中。 - Ajit Medhekar
如果您有兴趣,请为此做出承诺:stackoverflow.com/documentation/outlook-addin/commit - Kushan Randima
7个回答

59
以下是RobertG5的解决方案的详细说明(评论中太长):
问题在于插件已被Outlook硬禁用。据我所知,这与“通常”不加载的情况不同。要意识到这一点的关键是注意到该插件未显示在非活动应用程序加载项下,而是显示在已禁用的应用程序加载项下。这有所不同:在后一种情况下,仅转到COM-AddIn屏幕并选中复选框就无济于事。(我猜一个漂亮的消息框“您无法加载此插件,因为它已被硬禁用”可能要求过高了... 叹气。)
那么,如何重新启用已硬禁用的插件呢?
  1. 管理框中,将COM Add-ins更改为Disabled Add-ins,然后单击“前往”。
  2. 选择插件并单击启用。单击关闭
好的,现在可以重新加载插件了:
  1. 管理框中,将Disabled Add-ins更改为COM Add-ins,然后单击“前往”。
  2. 选中已禁用插件旁边的复选框。单击确定
参考资料:http://msdn.microsoft.com/en-us/library/ms268871.aspx

3
好的。谢谢您提供的参考信息。 我补充一下关于Microsoft Office 2003应用程序中禁用插件的列表,可以在“帮助-关于”菜单中找到。 - Boogier

54

您尝试重新启用插件了吗? 它在被禁用队列中后不会运行。 在从禁用的插件屏幕重新启用它之后,您可以在 COM-AddIn 屏幕中选中该框以加载它,这样应该会提示您更多详细信息,因为您设置了 VSTO_SUPPRESSDISPLAYALERTS 变量以了解最初发生了什么。


6
这正是问题所在:我在“COM 加载项”屏幕中勾选了该框,点击“确定”,重新进入“COM 加载项”屏幕时,发现该框未被选中。没有任何错误消息出现。 - Heinzi
3
我理解您的意思是要检查已禁用的插件队列(不是您未选中的插件)。在插件类型下拉菜单中,它是列表中的最后一项。这类似于可能有问题的插件的炼狱。 - Gardner
3
+1,你是对的。当然,我第一次阅读你的答案时误解了它(顺便说一下,这个踩并不是我)。我会把你的答案标记为最佳答案,但我也会保留我的答案,因为它更加详细。 - Heinzi
1
如果插件崩溃了,它将被添加到禁用的插件中。我不确定插件是否崩溃了太多次,或者Outlook确定崩溃类型足够严重,总之你必须先从那里删除它。否则尝试启用它是行不通的。 - The Muffin Man
1
如果你仍然遇到问题,尝试将应用程序启动中的所有内容都包装在try catch中。 - The Muffin Man
我已经完全删除我的附件,以便从新的解决方案中进行清晰的安装。现在,在使用F5启动Outlook后,我在附件或已禁用的附件列表中看不到它。 - Sonic Soul

50

虽然这是旧话题,但由于各种原因,我最近一直在排除加载不了的 Office Add-Ins 问题。

这花费了大量时间,所以我想分享一下。如果您的 Add-In 无法加载、不可见等,请尝试以下解决方案。

1. Add-In 未加载

未加载。在加载 COM Add-In 期间发生运行时错误。

enter image description here

该问题是由于缺少 .Net Framework 3.5 或 4.0 导致的。

注意:如果 Office 版本是 64 位(x64),只需要 .Net 4.0。然而,如果 Office 版本是 32 位(x86),即使安装了 .Net 4.0,也会出现错误。按照 此文章,我安装了 .Net 3.5,然后它在 x86 Office 上能够正常工作!

还需要从此处安装 VSTO Runtime 3.0。

2. Add-In 未加载

仔细检查您是否正确地拼写了注册表键。有时我会输入“Behaviour”,但在美式英语中是“Behavior”,因此请仔细检查“LoadBehavior”。

enter image description here

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

3. Add-In 不可见

您可以通过转到 Excel > 文件 > 选项 > Add-Ins > 选择管理下拉列表并将其设置为 COM Add-Ins > 单击“前往”,使 Add-In 可见。在 COM Add-Ins 对话框中,确保已选中 Add-In。

4. Add-In 已禁用

或者,Add-In 可能因已被禁用而被隐藏。您可以通过转到 Excel > 文件 > 选项 > Add-Ins > 选择管理下拉列表并设置为“已禁用”,然后单击“前往”。选择已被禁用的 Add-In,然后单击“启用”来启用它。

enter image description here

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日志记录和警报,您需要更改两个环境变量值,具体取决于您需要执行的操作:

显示VSTO警报提示

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

将VSTO警报记录到日志文件中

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

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


4). 这个插件被禁用了。 -> 对我来说就是这样! - gilu
“Manage” 需要设置为 “已禁用的项目”,这是让我明白的关键点。谢谢! - ΩmegaMan
1
很棒的答案。一旦我发现了环境变量来停止错误的抑制,我就可以看到我的Add-In在缺少“SQLite.Interop.dll”时崩溃了。非常感谢。 - Davy C
1
将近10年后,这个答案救了我的一天!设置这两个环境变量让我准确地找到了问题所在。谢谢! - Fabricio

8

我建议使用一个名为AddinSpy的微软工具来诊断插件问题。


经过尝试各种方法,这个工具对我很有用。原来插件已经被加载了,但是由于“此程序集是由比当前加载的运行时更新的运行时构建的,因此无法加载”而未能加载其他依赖项(dll)。 AddinSpy帮助我获取了该错误消息。 - floatingfrisbee
真是令人失望,那个链接已经失效了。我认为那个链接本来可以帮助我解决我的问题。 - RubberDuck
你可能想要搜索下载位置。这里有一个页面可以看看它的样子: https://msdn.microsoft.com/zh-cn/library/cc984533(v=office.12).aspx - Cédric Guillemette
2
如果您不介意自己构建它,AddInSpy(非官方)源代码可在GitHub上获取:https://github.com/NetOfficeFw/AddInSpy - Jon Iles

2
对我来说很有趣,我尝试了重新启动。这对我有用。然而,它对我有用的原因是我有一个隐藏的Excel.exe运行。由于此其他Excel应用程序正在运行(我正在将MSAccess应用程序迁移到VSTO),所以插件无法启动,因此Access打开了一个隐藏的自动化应用程序。
简而言之,如果您的插件未能启动,请快速检查是否有其他Excel应用程序在运行。当然,这仅适用于您尝试安装/运行全新的插件时。
(我使用了此链接) https://www.add-in-express.com/creating-addins-blog/2012/11/13/wix-installation-vsto-office-addin/

这也是我的问题,在运行自动化测试并每次测试时打开和关闭Excel的情况下。其中一个测试留下了一个流氓Excel.exe。 - gusmally supports Monica

1
这里还有另一种可能,即使上述环境变量已设置,你仍然没有得到任何反馈。我发现如果你在安装后(而不是之前正常运行的VSTO)遇到此错误,你还应该仔细检查注册表和"清单"条目(如果有的话)。
虽然Jeremy Thompson在他的第二个要点中指出了注册表,但他没有显示可能是你注册表设置的一部分的清单条目。如果你的清单条目没有指向正确的路径和文件,它将在添加-Ins列表中显示为"未加载"条目。
在这里,我们看到一个错误的条目,它只指向了VSTO文件,没有路径。 enter image description here 这会导致您的插件看起来像是加载出错,但没有错误弹出并出现,使事情变得令人沮丧。因此,它将如下所示,注意下面的位置条目也不显示路径。 enter image description here 通过输入正确的路径和文件名来更正该条目,就可以解决这个问题。
我认为缺少错误是因为最初您指向了空白,因此它列出了插件,因为它在注册表中,即使没有东西可以加载。

0
最终我说服了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] 无法加载文件或程序集或其某个依赖项


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接