共用方式為


應用程式層級增益集的架構

更新:2007 年 11 月

適用於

本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。

專案類型

  • 應用程式層級專案

Microsoft Office 版本

  • 2007 Microsoft Office system

  • Microsoft Office 2003

如需詳細資訊,請參閱依應用程式和專案類型提供的功能

您使用 Visual Studio Tools for Office 建立的增益集具有同時強調穩定性和安全性的架構功能,這些功能可讓增益集與 Microsoft Office 密切合作。本主題說明 Visual Studio Tools for Office 增益集的下列各方面:

  • 了解增益集

  • 增益集的元件

  • 增益集如何與 2007 Microsoft Office system 一起運作

  • 增益集如何與 Microsoft Office 2003 一起運作

  • Outlook 2003 增益集的關閉行為

如需使用 Visual Studio Tools for Office 增益集的一般資訊,請參閱 Office 方案開發概觀應用程式層級增益集程式設計入門

了解增益集

當您使用 Visual Studio Tools for Office 建置增益集時,會建立由 Microsoft Office 應用程式載入的 Managed 程式碼組件。載入組件之後,增益集就能回應應用程式所引發的事件 (例如,當使用者按一下功能表項目時)。增益集還可呼叫物件模型以自動化並擴充應用程式,而且它可以使用 .NET Framework 中的任何類別。

組件會透過應用程式的主要 Interop 組件與應用程式的 COM 元件進行通訊。如需詳細資訊,請參閱 Office 主要 Interop 組件Office 方案開發概觀

Visual Studio Tools for Office 會在不同的應用程式定義域中載入每個增益集。這意味著行為不正確的增益集不會導致其他增益集失敗。此外,還可確保關閉應用程式後,所有程式碼也會關閉,而且會從記憶體中卸載組件。如需應用程式定義域的詳細資訊,請參閱應用程式定義域概觀

注意事項:

您使用 Visual Studio Tools for Office 建立的增益集是設計為僅限於使用者啟動 Microsoft Office 主應用程式時使用如果是以程式設計的方式啟動應用程式 (例如,使用 Automation),則增益集可能無法如預期般運作。

增益集的元件

雖然增益集組件為主要元件,但仍有其他數個元件在 Microsoft Office 應用程式如何探索和載入增益集當中扮演重要角色。

登錄項目

Microsoft Office 應用程式會藉由尋找一組登錄項目來探索增益集。Microsoft Office 2003 和 2007 版的大部分登錄項目都相同,但有一個機碼不同:

  • 2007 Microsoft Office system 中的應用程式會在機碼 HKEY_CURRENT_USER\Software\Microsoft\Office\application name\Addins\add-in ID 之下尋找 Manifest 項目 (或者對於 Visio 而言,機碼為 HKEY_CURRENT_USER\Software\Microsoft\Visio\Addins\add-in ID)。Manifest 項目會指定部署資訊清單的完整路徑。

  • Microsoft Office 2003 應用程式會在機碼 HKEY_CURRENT_USER\Software\Microsoft\Office\application name\Addins\add-in ID 之下尋找 ManifestName 和 ManifestLocation 項目 (或者對於 Visio 而言,機碼為 HKEY_CURRENT_USER\Software\Microsoft\Visio\Addins\add-in ID)。這些項目會指定應用程式資訊清單的位置和名稱。

當您建置方案時,Visual Studio Tools for Office 會在開發電腦上建立所有必要的登錄項目,以便您偵錯和執行增益集。如需詳細資訊,請參閱 Office 方案建置程序概觀。 

如需增益集所使用登錄項目的完整清單,請參閱應用程式層級增益集的登錄項目

注意事項:

您可以在 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 Runtime

若要執行使用 Visual Studio Tools for Office 建立的增益集,則使用者電腦必須已安裝 Visual Studio Tools for Office Runtime。此 Runtime 包含 Unmanaged 元件和一組 Managed 組件。Unmanaged 元件會載入增益集組件。Managed 組件則會提供增益集程式碼用於自動化和擴充主應用程式的物件模型。

如需詳細資訊,請參閱 Visual Studio Tools for Office Runtime 概觀

增益集如何與 2007 Microsoft Office system 一起運作

當使用者啟動 2007 Microsoft Office system 中的應用程式時,該應用程式會使用部署資訊清單和應用程式資訊清單來尋找並載入最新版的增益集組件。下圖顯示這些增益集的基本架構。

2007 Microsoft Office system 的增益集架構

載入處理序

當使用者啟動應用程式時,就會發生下列步驟:

  1. 應用程式會檢查可識別使用 Visual Studio Tools for Office 建立之增益集的登錄項目。

  2. 如果應用程式找到了這些登錄項目,則會載入 VSTOEE.dll,而 VSTOEE.dll 會載入 VSTOLoader.dll。這些都是 Unmanaged DLL,而且是 Microsoft Visual Studio Tools for the Microsoft Office system (Runtime 3.0 版) 的載入器元件。如需詳細資訊,請參閱 Visual Studio Tools for Office Runtime 概觀

  3. VSTOLoader.dll 會載入 .NET Framework 並啟動 Visual Studio Tools for Office Runtime 的 Managed 部分。

  4. Visual Studio Tools for Office Runtime 會檢查資訊清單更新,然後下載最新的應用程式和部署資訊清單。

  5. Visual Studio Tools for Office Runtime 會執行一系列的安全性檢查。如需詳細資訊,請參閱 Office 方案中的安全性 (2007 系統)

  6. 如果增益集被信任而得以執行,則 Visual Studio Tools for Office Runtime 會使用部署資訊清單和應用程式資訊清單來檢查組件更新。如果有新版的組件可用,Runtime 就會將新版的組件下載至用戶端電腦上的 ClickOnce 快取。如需詳細資訊,請參閱部署 Office 方案 (2007 系統)

  7. Visual Studio Tools for Office Runtime 會建立新的應用程式定義域以便載入增益集組件。

  8. Visual Studio Tools for Office Runtime 會將增益集組件載入至此應用程式定義域中。

  9. 如果您已覆寫 RequestComAddInAutomationService 方法,則 Visual Studio Tools for Office Runtime 會在您的增益集中呼叫此方法。

    您可以選擇覆寫這個方法,以便將增益集中的物件公開至其他 Microsoft Office 方案。如需詳細資訊,請參閱在應用程式層級增益集中呼叫其他 Office 方案的程式碼

  10. 如果您已覆寫 RequestService 方法,則 Visual Studio Tools for Office Runtime 會在您的增益集中呼叫此方法。

    您可以選擇覆寫這個方法,以透過傳回可實作擴充性介面的物件,進而擴充 2007 Microsoft Office system 中的功能。如需詳細資訊,請參閱使用擴充性介面自訂 UI 功能

  11. Visual Studio Tools for Office Runtime 會在增益集中呼叫 ThisAddIn_Startup 方法。此方法是 Startup 事件的預設事件處理常式。如需詳細資訊,請參閱 Visual Studio Tools for Office 專案事件

注意事項:

Visual Studio Tools for Office Runtime 會針對主應用程式支援的每個擴充性介面,個別呼叫 RequestService 方法。雖然第一次呼叫 RequestService 方法通常發生於呼叫 ThisAddIn_Startup 方法之前,但增益集不得假設何時將會呼叫 RequestService 方法,或將要呼叫的次數。

增益集如何與 Microsoft Office 2003 一起運作

當使用者啟動 Microsoft Office 應用程式時,該應用程式會使用應用程式資訊清單 (部署資訊清單則為選擇性) 中的資訊來載入增益集組件。下圖顯示 Microsoft Office 2003 應用程式增益集的基本架構。

Microsoft Office 2003 的增益集架構

載入處理序

當使用者啟動應用程式時,就會發生下列步驟:

  1. 應用程式會檢查可識別使用 Visual Studio Tools for Office 建立之增益集的登錄項目。

  2. 如果應用程式找到了這些登錄項目,則會載入 VSTOEE.dll,而 VSTOEE.dll 會載入 AddinLoader.dll。這些都是 Unmanaged DLL,而且是 Visual Studio 2005 Tools for Office Second Edition Runtime 的載入器元件。如需詳細資訊,請參閱 Visual Studio Tools for Office Runtime 概觀

  3. AddinLoader.dll 會載入 .NET Framework 並啟動 Visual Studio Tools for Office Runtime 的 Managed 部分。

  4. Visual Studio Tools for Office Runtime 會建立新的應用程式定義域、設定應用程式定義域不信任「我的電腦區域」的原則,以及檢查程式碼存取安全性原則存放區以尋找增益集組件的原則。

  5. .NET Framework 會根據應用程式定義域的原則,驗證組件所呈現的辨識項。如果失敗,就會引發錯誤。如果通過,就繼續進行處理序。

  6. 如果增益集使用部署資訊清單,則 Visual Studio Tools for Office Runtime 會使用它來檢查組件更新。如果必須進行任何更新,就會立即執行。

  7. Visual Studio Tools for Office Runtime 會將增益集組件載入至新的應用程式定義域中。

  8. 如果您已覆寫 RequestComAddInAutomationService 方法,則 Visual Studio Tools for Office Runtime 會在您的增益集中呼叫此方法。

    您可以選擇覆寫這個方法,以便將增益集中的物件公開至其他 Microsoft Office 方案。如需詳細資訊,請參閱在應用程式層級增益集中呼叫其他 Office 方案的程式碼

  9. Visual Studio Tools for Office Runtime 會在增益集中呼叫 ThisAddIn_Startup 方法。此方法是 Startup 事件的預設事件處理常式。如需詳細資訊,請參閱 Visual Studio Tools for Office 專案事件

Outlook 2003 增益集的關閉行為

如果您要將現有 Outlook 2003 COM 增益集 (也就是直接實作 IDTExtensibility2 介面的增益集) 移轉到 Visual Studio Tools for Office,請移除任何設計用來解決潛在關閉問題的程式碼。否則,此程式碼可能會與使用 Visual Studio Tools for Office 建立之 Outlook 2003 增益集的關閉處理序衝突,或您的增益集可能會過早卸載。

注意事項:

本節說明的行為不適用於 Outlook 2007 增益集。Outlook 2007 永遠都會呼叫增益集中的 OnDisconnection 方法,即使增益集仍然有 Outlook 物件的參考也一樣。

關閉問題的背景

只要 COM 增益集具有一個或多個 Outlook 物件的參考,Outlook 2003 就不會呼叫增益集中的 OnDisconnection 方法。如果增益集具有僅在 OnDisconnection 方法中清除的物件參考,則 Outlook 2003 絕不會呼叫 OnDisconnection 方法。因此,增益集絕不會卸載,而且 Outlook 2003 絕不會關閉。

Visual Studio Tools for Office 如何解決關閉問題

使用 Visual Studio Tools for Office 建立的 Outlook 2003 增益集會以避免這種潛在問題的方式卸載。發生下列其中一種情況時,如果增益集沒有任何 ExplorerInspector 物件的參考,Visual Studio Tools for Office Runtime 就會引發增益集的 Shutdown 事件並卸載增益集的應用程式定義域:

當應用程式定義域卸載時,就會清除其他 Outlook 物件的所有未解決參考,然後 Outlook 2003 才可以關閉增益集並結束。

請參閱

概念

文件層級自訂的架構

Visual Studio Tools for Office Runtime 概觀

應用程式層級增益集程式設計

開發 Office 方案

其他資源

Visual Studio Tools for Office 方案的架構

Office 方案中的安全性

部署 Office 方案