다음을 통해 공유


응용 프로그램 수준 추가 기능 아키텍처

업데이트: 2007년 11월

적용 대상

이 항목의 정보는 Microsoft Office의 지정된 Visual Studio Tools for 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 응용 프로그램에서 로드하는 관리 코드 어셈블리를 만듭니다. 어셈블리가 로드되면 추가 기능에서 사용자가 메뉴 항목을 클릭할 때와 같이 응용 프로그램에서 발생하는 이벤트에 응답할 수 있습니다. 또한 추가 기능에서는 개체 모델을 호출하여 응용 프로그램을 자동화 및 확장할 수 있으며 .NET Framework의 모든 클래스를 사용할 수도 있습니다.

어셈블리와 응용 프로그램의 COM 구성 요소 사이의 통신은 응용 프로그램의 주 interop 어셈블리를 통해 이루어집니다. 자세한 내용은 Office 주 Interop 어셈블리Office 솔루션 개발 개요를 참조하십시오.

Visual Studio Tools for Office에서는 각 추가 기능을 서로 다른 응용 프로그램 도메인에 로드합니다. 따라서 한 추가 기능이 올바르지 않게 동작해도 다른 추가 기능이 잘못 동작하게 되지 않습니다. 또한 응용 프로그램이 닫힐 때 모든 코드가 종료되고 어셈블리가 메모리에서 언로드됩니다. 응용 프로그램 도메인에 대한 자세한 내용은 응용 프로그램 도메인 개요를 참조하십시오.

참고:

Visual Studio Tools for Office를 사용하여 만든 추가 기능은 최종 사용자가 호스트 Microsoft Office 응용 프로그램을 시작할 경우에만 사용됩니다. 자동화 기능을 사용하는 등 프로그래밍 방식으로 응용 프로그램을 시작하면 추가 기능이 예상대로 작동하지 않을 수 있습니다.

추가 기능의 구성 요소

추가 기능 어셈블리는 주 구성 요소이지만 Microsoft Office 응용 프로그램에서 추가 기능을 검색하여 로드하는 방식에 중요한 역할을 하는 다른 구성 요소도 여러 개 있습니다.

레지스트리 항목

Microsoft Office 응용 프로그램에서는 레지스트리 항목 집합을 찾아 추가 기능을 검색합니다. 대부분의 레지스트리 항목은 2003 및 2007 릴리스의 Microsoft Office에서 동일하지만 한 개의 키는 다릅니다.

  • 2007 Microsoft Office system의 응용 프로그램에서는 HKEY_CURRENT_USER\Software\Microsoft\Office\application name\Addins\add-in ID(Visio의 경우, HKEY_CURRENT_USER\Software\Microsoft\Visio\Addins\add-in ID) 키 아래에서 Manifest 항목을 찾습니다. Manifest 항목은 배포 매니페스트의 전체 경로를 지정합니다.

  • Microsoft Office 2003 응용 프로그램에서는 HKEY_CURRENT_USER\Software\Microsoft\Office\application name\Addins\add-in ID(Visio의 경우, HKEY_CURRENT_USER\Software\Microsoft\Visio\Addins\add-in ID) 키 아래에서 ManifestName 및 ManifestLocation 항목을 찾습니다. 이러한 항목은 응용 프로그램 매니페스트의 위치 및 이름을 지정합니다.

솔루션을 빌드하면 추가 기능을 디버깅하고 실행할 수 있도록 Visual Studio Tools for Office에서 배포 컴퓨터에 필요한 모든 레지스트리 항목을 만듭니다. 자세한 내용은 Office 솔루션 빌드 프로세스 개요를 참조하십시오. 

추가 기능에서 사용되는 레지스트리 항목의 전체 목록은 응용 프로그램 수준 추가 기능에 대한 레지스트리 항목을 참조하십시오.

참고:

HKEY_CURRENT_USER 대신 HKEY_LOCAL_MACHINE 아래에 레지스트리 키를 만들어 컴퓨터의 모든 사용자가 Microsoft Office 2003용 Visual Studio Tools for Office 추가 기능을 사용할 수 있도록 배포할 수 있습니다. 그러나 2007 Microsoft Office system용 Visual Studio Tools for Office 추가 기능은 HKEY_LOCAL_MACHINE 아래에 등록하는 방법으로 컴퓨터의 모든 사용자에게 배포할 수 없습니다. 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용 추가 기능 아키텍처

로드 프로세스

사용자가 응용 프로그램을 시작할 때 다음 단계가 수행됩니다.

  1. 응용 프로그램이 레지스트리에서 Visual Studio Tools for Office를 사용하여 만든 추가 기능을 식별하는 항목을 찾습니다.

  2. 응용 프로그램에서 이러한 레지스트리 항목을 찾은 경우 VSTOLoader.dll을 로드하는 VSTOEE.dll을 로드합니다. 이들 DLL은 Microsoft Visual Studio Tools for the Microsoft Office system (버전 3.0 런타임)의 로더 구성 요소인 관리되지 않는 DLL입니다. 자세한 내용은 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 시스템)을 참조하십시오.

  6. 추가 기능이 실행할 수 있는 것으로 신뢰된 경우 Visual Studio Tools for Office 런타임에서 배포 매니페스트 및 응용 프로그램 매니페스트를 사용하여 어셈블리 업데이트를 확인합니다. 새 버전의 어셈블리를 사용할 수 있으면 런타임에서는 새 버전의 어셈블리를 클라이언트 컴퓨터의 ClickOnce 캐시로 다운로드합니다. 자세한 내용은 Office 솔루션 배포(2007 시스템)를 참조하십시오.

  7. Visual Studio Tools for Office 런타임에서 추가 기능 어셈블리를 로드할 새 응용 프로그램 도메인을 만듭니다.

  8. Visual Studio Tools for Office 런타임에서 응용 프로그램 도메인에 추가 기능 어셈블리를 로드합니다.

  9. 추가 기능을 재정의한 경우 Visual Studio Tools for Office 런타임에서 해당 추가 기능의 RequestComAddInAutomationService 메서드를 호출합니다.

    이 메서드를 선택적으로 재정의하여 추가 기능의 개체를 다른 Microsoft Office 솔루션에 노출할 수 있습니다. 자세한 내용은 다른 Office 솔루션에서 응용 프로그램 수준 추가 기능의 코드 호출을 참조하십시오.

  10. 추가 기능을 재정의한 경우 Visual Studio Tools for Office 런타임에서 해당 추가 기능의 RequestService 메서드를 호출합니다.

    필요할 경우 확장성 인터페이스를 구현하는 개체를 반환하는 방식으로 이 메서드를 재정의하여 2007 Microsoft Office system의 기능을 확장할 수 있습니다. 자세한 내용은 확장성 인터페이스를 사용하여 UI 기능 사용자 지정을 참조하십시오.

  11. Visual Studio Tools for Office 런타임에서 추가 기능의 ThisAddIn_Startup 메서드를 호출합니다. 이 메서드는 Startup 이벤트의 기본 이벤트 처리기입니다. 자세한 내용은 Visual Studio Tools for Office 프로젝트 이벤트를 참조하십시오.

참고:

Visual Studio Tools for Office 런타임에서는 호스트 응용 프로그램에서 지원하는 각 확장성 인터페이스에 대해 RequestService 메서드를 별도로 호출합니다. RequestService 메서드에 대한 첫 번째 호출은 대개 ThisAddIn_Startup 메서드 호출 전에 수행되지만 추가 기능에서 RequestService 메서드가 호출되는 시기나 호출되는 빈도를 가정하지 않아야 합니다.

추가 기능이 Microsoft Office 2003과 작동하는 방식

Microsoft Office 응용 프로그램을 시작하면 해당 응용 프로그램에서는 응용 프로그램 매니페스트 및 선택적으로 배포 매니페스트의 정보를 사용하여 추가 기능 어셈블리를 로드합니다. 다음 그림에서는 Microsoft Office 2003 응용 프로그램용 추가 기능의 기본 아키텍처를 보여 줍니다.

Microsoft Office 2003용 추가 기능 아키텍처

로드 프로세스

사용자가 응용 프로그램을 시작할 때 다음 단계가 수행됩니다.

  1. 응용 프로그램이 레지스트리에서 Visual Studio Tools for Office를 사용하여 만든 추가 기능을 식별하는 항목을 찾습니다.

  2. 응용 프로그램에서 이러한 레지스트리 항목을 찾은 경우 AddinLoader.dll을 로드하는 VSTOEE.dll을 로드합니다. 이들 DLL은 Visual Studio 2005 Tools for Office Second Edition 런타임의 로더 구성 요소인 관리되지 않는 DLL입니다. 자세한 내용은 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. 추가 기능을 재정의한 경우 Visual Studio Tools for Office 런타임에서 해당 추가 기능의 RequestComAddInAutomationService 메서드를 호출합니다.

    이 메서드를 선택적으로 재정의하여 추가 기능의 개체를 다른 Microsoft Office 솔루션에 노출할 수 있습니다. 자세한 내용은 다른 Office 솔루션에서 응용 프로그램 수준 추가 기능의 코드 호출을 참조하십시오.

  9. Visual Studio Tools for Office 런타임에서 추가 기능의 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에서는 추가 기능에 Outlook 개체에 대한 참조가 남아 있는 경우에도 추가 기능의 OnDisconnection 메서드를 항상 호출합니다.

종료 문제의 배경

COM 추가 기능에 하나 이상의 Outlook 개체에 대한 참조가 있으면 Outlook 2003에서 추가 기능의 OnDisconnection 메서드를 호출하지 않습니다. 추가 기능에 OnDisconnection 메서드에서만 정리되는 개체 참조가 있는 경우 Outlook 2003에서는 OnDisconnection 메서드를 호출하지 않습니다. 결과적으로 추가 기능이 업로드되지 않고 Outlook 2003이 종료되지 않습니다.

Visual Studio Tools for Office에서 종료 문제를 해결하는 방법

Visual Studio Tools for Office를 사용하여 만든 Outlook 2003 추가 기능은 이러한 잠재적 문제를 피하기 위해 언로드됩니다. Visual Studio Tools for Office 런타임에서는 다음 중 하나가 발생할 때 추가 기능에 Explorer 또는 Inspector 개체에 대한 참조가 없는 경우 추가 기능의 Shutdown 이벤트를 발생시키고 해당 추가 기능의 응용 프로그램 도메인을 언로드합니다.

응용 프로그램 도메인이 언로드되면 다른 Outlook 개체에 대해 해결되지 않은 모든 참조가 정리된 다음 Outlook 2003에서 추가 기능을 종료합니다.

참고 항목

개념

문서 수준 사용자 지정 아키텍처

Visual Studio Tools for Office 런타임 개요

응용 프로그램 수준 추가 기능 프로그래밍

Office 솔루션 개발

기타 리소스

Visual Studio Tools for Office 솔루션의 아키텍처

Office 솔루션의 보안

Office 솔루션 배포