应用程序级外接程序的体系结构

外接程序的组件


尽管外接程序程序集是主要组件,但其他一些组件对 Microsoft Office 应用程序如何发现和加载外接程序起着重要作用。

注册表项

Microsoft Office 应用程序通过查找一组注册表项来发现外接程序。Microsoft Office 2003 版和 2007 版的大部分注册表项都相同,但是有一项不同:

  • 2007 Microsoft Office system 中的应用程序在 HKEY_CURRENT_USERSoftwareMicrosoftOffice应用程序名称Addins外接程序 ID(或者在 Visio 的 HKEY_CURRENT_USERSoftwareMicrosoftVisioAddins外接程序 ID)项下查找 Manifest 项。Manifest 项指定部署清单的完整路径。

  • Microsoft Office 2003 应用程序在 HKEY_CURRENT_USERSoftwareMicrosoftOffice应用程序名称Addins外接程序 ID(或者在 Visio 的 HKEY_CURRENT_USERSoftwareMicrosoftVisioAddins外接程序 ID)项下查找 ManifestNameManifestLocation 项。这些项指定应用程序清单的位置和名称。

生成解决方案时,Visual Studio Tools for Office 会在开发计算机上创建所有必需的注册表项,以便您可以调试和运行外接程序。有关更多信息,请参见 Office 解决方案生成过程概述。 

有关外接程序所使用的注册表项的完整列表,请参见应用程序级外接程序的注册表项

Bb386298.alert_note(zh-cn,VS.90).gif说明:

通过在 HKEY_LOCAL_MACHINE(而非 HKEY_CURRENT_USER)下创建注册表项,可以部署 Microsoft Office 2003 的 Visual Studio Tools for Office 外接程序以使其可供一台计算机的所有用户使用。但是,您无法通过在 HKEY_LOCAL_MACHINE 下注册外接程序从而为一台计算机的所有用户部署 2007 Microsoft Office system 的 Visual Studio Tools for Office 外接程序。2007 Microsoft Office system 中的应用程序仅识别在 HKEY_CURRENT_USER 下注册的 Visual Studio Tools for Office 外接程序。

部署清单和应用程序清单

外接程序使用部署清单和应用程序清单来标识和加载外接程序程序集的最新版本。部署清单指向当前应用程序清单。应用程序清单指向外接程序程序集,并指定要在该程序集中执行入口点类。有关更多信息,请参见 Office 解决方案中的应用程序和部署清单

Visual Studio Tools for Office 运行时

若要运行使用 Visual Studio Tools for Office 创建的外接程序,最终用户计算机必须安装 Visual Studio Tools for Office 运行时。该运行时包括非托管组件和一组托管程序集。非托管组件加载外接程序程序集。托管程序集提供外接程序代码用于实现宿主应用程序自动化和扩展宿主应用程序的对象模型。

有关更多信息,请参见 Visual Studio Tools for Office 运行库概述

外接程序如何使用 2007 Microsoft Office System


用户启动 2007 Microsoft Office system 中的应用程序时,该应用程序将使用部署清单和应用程序清单来定位并加载外接程序程序集的最新版本。下图显示了这些外接程序的基本体系结构。

2007 Microsoft Office system 的外接程序体系结构
2007 Office 外接程序体系结构

加载过程

下面的步骤在用户启动应用程序后进行:

  1. 应用程序检查注册表以查找标识用 Visual Studio Tools for Office 创建的外接程序的项。

  2. 如果应用程序找到这些注册表项,则该应用程序将加载 VSTOEE.dll(它将加载 VSTOLoader.dll)。这些非托管 DLL 是 Microsoft Visual Studio Tools for the Microsoft Office system(3.0 版运行时) 的加载程序组件。有关更多信息,请参见 Visual Studio Tools for Office 运行库概述

  3. VSTOLoader.dll 加载 .NET Framework 并启动 Visual Studio Tools for Office 运行时的托管部分。

  4. Visual Studio Tools for Office 运行时检查清单更新,并下载最新的应用程序和部署清单。

  5. Visual Studio Tools for Office 运行时将执行一系列安全检查。有关更多信息,请参见 Office 解决方案中的安全性 (2007 System)

  6. 如果外接程序受信任可以运行,则 Visual Studio Tools for Office 运行时将使用部署清单和应用程序清单来检查程序集更新。如果有新版本的程序集,则运行时会将新版本的程序集下载到客户端计算机上的 ClickOnce 缓存中。有关更多信息,请参见部署 Office 解决方案 (2007 System)

  7. Visual Studio Tools for Office 运行时将创建一个要在其中加载外接程序程序集的新应用程序域。

  8. Visual Studio Tools for Office 运行时将外接程序程序集加载到应用程序域中。

  9. 如果您已重写 RequestComAddInAutomationService 方法,则 Visual Studio Tools for Office 运行时将在外接程序中调用此方法。

    您可以选择重写此方法以向其他 Microsoft Office 解决方案公开外接程序中的对象。有关更多信息,请参见从其他 Office 解决方案调用应用程序级外接程序中的代码

  10. 如果您已重写 RequestService 方法,则 Visual Studio Tools for Office 运行时将在外接程序中调用此方法。

    您可以选择重写此方法以通过返回一个实现扩展性接口的对象来扩展 2007 Microsoft Office system 中的功能。有关更多信息,请参见使用扩展性接口自定义 UI 功能

  11. Visual Studio Tools for Office 运行时调用外接程序中的 ThisAddIn_Startup 方法。此方法是 Startup 事件的默认事件处理程序。有关更多信息,请参见 Visual Studio Tools for Office 项目事件

Bb386298.alert_note(zh-cn,VS.90).gif说明:

Visual Studio Tools for Office 运行时为宿主应用程序所支持的每个扩展性接口分别调用 RequestService 方法。尽管第一次调用 RequestService 方法通常发生在调用 ThisAddIn_Startup 方法之前,但外接程序不应对何时调用 RequestService 方法或调用多少次做出任何假设。

外接程序如何使用 Microsoft Office 2003


用户启动 Microsoft Office 应用程序时,该应用程序将使用应用程序清单(或者部署清单)中的信息来加载外接程序程序集。下图显示了 Microsoft Office 2003 应用程序的外接程序基本体系结构。

Microsoft Office 2003 的外接程序体系结构
Office 2003 外接程序体系结构

加载过程

下面的步骤在用户启动应用程序后进行:

  1. 应用程序检查注册表以查找标识用 Visual Studio Tools for Office 创建的外接程序的项。

  2. 如果应用程序找到这些注册表项,则该应用程序将加载 VSTOEE.dll(它将加载 AddinLoader.dll)。这些非托管 DLL 是 Visual Studio 2005 Tools for Office Second Edition 运行时的加载程序组件。有关更多信息,请参见 Visual Studio Tools for Office 运行库概述

  3. AddinLoader.dll 加载 .NET Framework 并启动 Visual Studio Tools for Office 运行时的托管部分。

  4. Visual Studio Tools for Office 运行时创建一个新应用程序域,将该应用程序域上的策略设置为不信任“我的电脑区域”,并检查代码访问安全策略存储区以查找外接程序程序集的策略。

  5. .NET Framework 根据应用程序域的策略验证程序集提供的证据。如果验证失败,则引发一个错误。如通过验证,则继续该过程。

  6. 如果外接程序使用部署清单,则 Visual Studio Tools for Office 运行时将使用它来检查程序集更新。如果有必要更新,则立即更新。

  7. Visual Studio Tools for Office 运行时将外接程序程序集加载到新应用程序域中。

  8. 如果您已重写 RequestComAddInAutomationService 方法,则 Visual Studio Tools for Office 运行时将在外接程序中调用此方法。

    您可以选择重写此方法以向其他 Microsoft Office 解决方案公开外接程序中的对象。有关更多信息,请参见从其他 Office 解决方案调用应用程序级外接程序中的代码

  9. Visual Studio Tools for Office 运行时调用外接程序中的 ThisAddIn_Startup 方法。此方法是 Startup 事件的默认事件处理程序。有关更多信息,请参见 Visual Studio Tools for Office 项目事件

引文来源  应用程序级外接程序的体系结构