【问题标题】:My VSTO 3.0 Outlook addin doesn't load我的 VSTO 3.0 Outlook 插件无法加载
【发布时间】:2010-11-22 18:00:46
【问题描述】:

我正在尝试诊断为什么我用 C#/VSTO 3.0/VS 2008 编写的 Outlook 插件在安装后无法加载。

该插件在我安装了 Visual Studio 2008 的开发机器上运行良好。我不能指望我的所有用户都具备所有的先决条件,所以我通过这些步骤编写了一个安装程序: http://msdn.microsoft.com/en-us/library/cc563937(loband).aspx

我在全新安装了 Outlook 2007 的全新 Windows XP SP 2 计算机上安装了加载项。它可以安装所有先决条件(.NET 3.5、VSTO 3.0 运行时、Windows Installer 3.1、2007 PIA)。 Outlook 启动,但加载项未运行。如果我转到信任中心的加载项选项卡,我会在“非活动应用程序加载项”部分看到我的加载项,并显示消息“未加载。加载 COM 加载项期间发生运行时错误。”。

不知道如何找到具体的错误,以便我修复它。

注册键看起来没问题。在 HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins\BlahAddin 下,我看到了描述、FriendlyName、LoadBehavior(设置为 3 直到失败,之后如果设置为 2)和清单。

尝试了 VSTO_SUPPRESSDISPLAYALERTS 环境变量技巧,然后从命令行启动 Outlook,但没有输出。

我有或多或少的远程调试工作,但我不确定要寻找什么。当我附加到 Outlook 时,我没有看到我的 DLL 已加载,但也许托管 DLL 在 VS 中的显示方式不同。

关于我可以遵循的后续步骤以产生我可以诊断的特定错误的任何其他想法?

【问题讨论】:

    标签: vsto outlook-2007 outlook-addin


    【解决方案1】:

    在数周的痛苦之后解决了我的问题。在安装构建期间,“清单”注册密钥被损坏为一些垃圾值。这是一个已知的 Visual Studio 错误,据说在 Visual Studio 2008 SP 1 中得到了修复,但显然不适合我。将项目名称重命名为与插件名称不同可以解决问题。随机吧?

    【讨论】:

      【解决方案2】:

      确保您在 Outlook 调用的所有方法的顶层都有 try-catch 处理程序,并记录您无法以某种方式处理的任何异常。将您的故障排除重点放在 Startup 方法和初始化期间调用的其他方法上。

      【讨论】:

      • 不幸的是没有帮助。我的启动/关闭方法非常贫瘠,我尝试用 try/catch 块包装它们。
      【解决方案3】:

      您可能想使用远程调试器进行调试。在您的测试机器上(使用 UNC 路径共享)从您的开发人员机器(在 Program Files 中的 Visual Studio 文件夹中)共享 MSVCMON.EXE 文件夹,并在模块中的调试器捕获 (.NET) 异常下启动 Outlook 和在方法中设置断点。

      如果您每次安装解决方案之前都需要清理测试计算机,您可能应该在 Virtual PC 2007 VM(免费下载)下运行 XP,并在设置除插件之外的所有内容后切换到差异化 HD 以快照您的预安装状态一次,因此您不必在更改程序以修复错误时继续卸载/重新安装。

      您是安装调试版本还是发布版本?也许一种口味有不同的要求。只是猜测。

      -Mike [MSFT Office 开发人员]

      【讨论】:

      • 始终安装在没有任何状态的干净 VM 上。可以在托管和非托管模式下通过远程调试附加到 Outlook。加载过程中会抛出异常,但如果没有 mso.dll 符号则难以破译:“OUTLOOK.EXE 中 0x7c81eb33 (kernel32.dll) 处的第一次机会异常:0x000006A6:绑定句柄无效。”未加载插件时,安全模式下的类似异常。无法在我的加载项中设置断点(“断点当前不会被命中。不会为此文档加载任何符号。”)但我的消息框未显示意味着我在加载加载项之前就被打断了。
      【解决方案4】:

      在您的计算机上,当您从 Visual Studio 运行插件时,它应该在 HKEY_CURRENT_USER\Software\Microsoft\VSTO\Security\Inclusion{SomeGuid} 中创建一个注册表项。确保这些注册表设置也与您的插件一起部署。它们使您的代码受到信任。

      【讨论】:

        猜你喜欢
        • 2020-04-04
        • 1970-01-01
        • 2016-02-09
        • 2021-06-03
        • 1970-01-01
        • 2018-11-27
        • 2015-07-13
        • 2017-11-04
        • 2010-12-10
        相关资源
        最近更新 更多