Windows Installer를 사용하여 VSTO 솔루션 배포

요약

Visual Studio 설치 관리자 프로젝트를 사용하여 Microsoft VSTO(Visual Studio Tools for Office) 추가 기능 또는 문서 수준 솔루션을 배포하는 방법을 알아봅니다.

Wouter van Vugt, Code Counsel

Ted Pattison, Ted Pattison Group

이 문서는 원래 작성자의 권한으로 Microsoft에 의해 업데이트되었습니다.

: Visual Studio Tools for Office, Microsoft Office, Microsoft Visual Studio

Windows Installer 패키지를 사용하여 VSTO 솔루션을 개발하고 솔루션을 배포할 수 있습니다. 이 설명에는 간단한 Office 추가 기능을 배포하는 단계가 포함되어 있습니다.

배포 방법

ClickOnce를 사용하여 추가 기능 및 솔루션에 대한 설정을 쉽게 만들 수 있습니다. 그러나 컴퓨터 수준 추가 기능처럼 관리 권한이 필요한 추가 기능은 설치할 수 없습니다.

관리 권한이 필요한 추가 기능은 Windows Installer를 사용하여 설치할 수 있지만 설치 프로그램을 만드는 데 더 많은 작업이 필요합니다.

ClickOnce를 사용하여 VSTO 솔루션을 배포하는 방법에 대한 개요는 ClickOnce를 사용하여 Office 솔루션 배포를 참조하세요.

VSTO 런타임을 대상으로 하는 Office 솔루션 배포

ClickOnce 및 Windows Installer 패키지는 Office 솔루션을 설치할 때 동일한 기본 작업을 수행해야 합니다.

  1. 사용자 컴퓨터에 필수 구성 요소를 설치합니다.
  2. 솔루션에 대한 특정 구성 요소를 배포합니다.
  3. 추가 기능의 경우 레지스트리 항목을 만듭니다.
  4. 실행을 허용하도록 솔루션을 신뢰합니다.

대상 컴퓨터의 필수 구성 요소

VSTO 솔루션을 실행하기 위해 컴퓨터에 설치해야 하는 소프트웨어 목록은 다음과 같습니다.

  • Microsoft Office 2010 이상
  • Microsoft .NET Framework 4 이상
  • Microsoft Visual Studio 2010 Tools for Office Runtime. 런타임은 추가 기능 및 문서 수준 솔루션을 관리하는 환경을 제공합니다. 런타임 버전은 Microsoft Office와 함께 제공되지만 추가 기능을 사용하여 특정 버전을 재배포할 수 있습니다.
  • Microsoft Office용 기본 Interop 어셈블리(포함된 Interop 형식을 사용하지 않는 경우)
  • 프로젝트에서 참조하는 유틸리티 어셈블리

솔루션에 대한 특정 구성 요소

설치 관리자 패키지는 다음 구성 요소를 사용자의 컴퓨터에 설치해야 합니다.

  • Microsoft Office 문서(문서 수준 솔루션을 만드는 경우)
  • 사용자 지정 어셈블리 및 필요한 어셈블리
  • 구성 파일과 같은 추가 구성 요소
  • 애플리케이션 매니페스트(.manifest)
  • 배포 매니페스트(.vsto)

추가 기능에 대한 레지스트리 항목

Microsoft Office는 레지스트리 항목을 사용하여 추가 기능을 찾고 로드합니다. 이러한 레지스트리 항목은 배포 프로세스의 일부로 만들어야 합니다. 이러한 레지스트리 항목에 대한 자세한 내용은 VSTO 추가 기능에 대한 등록 항목을 참조하세요.

사용자 지정 양식 영역을 표시하는 Outlook 추가 기능을 사용하려면 양식 영역을 식별할 수 있는 추가 레지스트리 항목이 필요합니다. 레지스트리 항목에 대한 자세한 내용은 Outlook 양식 영역에 대한 레지스트리 항목을 참조하세요.

문서 수준 솔루션에는 레지스트리 항목이 필요하지 않습니다. 대신에 문서 내의 속성을 사용하여 사용자 지정을 찾습니다. 자세한 내용은 사용자 지정 문서 속성 개요를 참조하세요.

VSTO 솔루션 신뢰

사용자 지정을 실행하려면 컴퓨터에서 신뢰하는 솔루션이어야 합니다. 추가 기능은 인증서로 매니페스트에 서명하거나, 포함 목록과 신뢰 관계를 생성하거나, 컴퓨터의 신뢰할 수 있는 위치에 설치하여 신뢰할 수 있습니다.

서명용 인증서를 가져오는 방법에 대한 자세한 내용은 ClickOnce 배포 및 Authenticode를 참조하세요. 자세한 내용은 포함 목록을 사용하여 Office 솔루션 신뢰를 참조하세요. Windows Installer 파일에서 사용자 지정 작업을 수행하여 포함 목록 항목을 추가할 수 있습니다. 포함 목록을 사용하는 방법에 대한 자세한 내용은 방법: 포함 목록 보안 구성을 참조하세요.

두 옵션을 모두 사용하지 않으면 솔루션을 신뢰할지 여부를 결정할 수 있는 신뢰 프롬프트가 사용자에게 표시됩니다.

문서 수준 솔루션과 관련된 보안에 대한 자세한 내용은 문서에 대한 신뢰 부여를 참조하세요.

기본 설치 관리자 만들기

설치 및 배포 프로젝트 템플릿은 다운로드할 수 있는 Microsoft Visual Studio Installer Projects 확장에 포함되어 있습니다.

Office 솔루션에 대한 설치 관리자를 만들려면 다음 작업을 수행해야 합니다.

  • 배포할 Office 솔루션의 구성 요소를 추가합니다.
  • 애플리케이션 수준 추가 기능의 경우 레지스트리 키를 구성합니다.
  • 최종 사용자 컴퓨터에 설치할 수 있도록 필수 구성 요소를 구성합니다.
  • 필수 구성 요소를 사용할 수 있는지 확인하도록 시작 조건을 구성합니다. 모든 필수 구성 요소가 설치되지 않은 경우 시작 조건을 사용하여 설치를 차단할 수 있습니다.

첫 번째 단계에서는 설치 프로젝트를 만듭니다.

AddIn Setup 프로젝트를 만들려면

  1. 배포할 Office AddIn 프로젝트를 엽니다. 이 예제에서는 ExcelAddIn이라는 Excel 추가 기능을 사용합니다.
  2. Office 프로젝트를 열면 파일 메뉴에서 추가를 확장하고 새 프로젝트를 클릭하여 새 프로젝트를 추가합니다.
  1. 새 프로젝트 추가 대화 상자에서 설치 프로젝트 템플릿을 선택합니다.
  2. 다음을 클릭합니다.
  1. 이름 상자에 OfficeAddInSetup을 입력합니다.
  1. 만들기를 클릭하여 새 설치 프로젝트를 만듭니다.

Visual Studio에 새 설정 프로젝트에 대한 파일 시스템 탐색기가 열립니다. 파일 시스템 탐색기를 사용하면 설치 프로젝트에 파일을 추가할 수 있습니다.

Screenshot of the File System Explorer for the setup project

그림 1: 설치 프로젝트의 파일 시스템 탐색기

설치 프로젝트는 ExcelAddIn을 배포해야 합니다. 설치 프로젝트에 ExcelAddIn 프로젝트 출력을 추가하여 이 작업에 대한 설치 프로젝트를 구성할 수 있습니다.

ExcelAddIn 프로젝트 출력을 추가하려면

  1. 솔루션 탐색기에서 OfficeAddInSetup을 마우스 오른쪽 단추로 클릭하고 추가, 프로젝트 출력을 차례로 클릭합니다.

  2. 프로젝트 출력 그룹 추가 대화 상자의 프로젝트 목록에서 ExcelAddIn을 선택하고 기본 출력을 선택합니다.

  3. 확인을 클릭하여 설치 프로젝트에 대한 프로젝트 출력을 추가합니다.

    Screenshot of the Setup Project Add Project Output Group dialog

    그림 2: 프로젝트 출력 그룹 추가 대화 상자의 설치 프로젝트

설치 프로젝트는 배포 매니페스트 및 애플리케이션 매니페스트를 배포해야 합니다. 이러한 두 파일을 ExcelAddIn 프로젝트의 출력 폴더에서 독립 실행형 파일로 설치 프로젝트에 추가합니다.

배포 및 애플리케이션 매니페스트를 추가하려면

  1. 솔루션 탐색기에서 OfficeAddInSetup을 마우스 오른쪽 단추로 클릭하고 추가, 파일을 차례로 클릭합니다.

  2. 파일 추가 대화 상자에서 ExcelAddIn 출력 디렉터리로 이동합니다. 일반적으로 출력 디렉터리는 선택한 빌드 구성에 따라 프로젝트 루트 디렉터리의 bin\release 하위 폴더입니다.

  3. ExcelAddIn.vstoExcelAddIn.dll.manifest 파일을 선택하고 열기를 클릭하여 이러한 두 파일을 설치 프로젝트에 추가합니다.

    Screenshot of the Application and deployment manifests in Solution Explorer

    그림 3: 솔루션 탐색기의 추가 기능에 대한 애플리케이션 및 배포 매니페스트

ExcelAddIn 참조에는 ExcelAddIn에 필요한 모든 구성 요소가 포함됩니다. 이러한 구성 요소는 올바르게 등록될 수 있도록 필수 구성 요소 패키지를 사용하여 제외 및 배포해야 합니다. 또한 설치가 시작되기 전에 소프트웨어 사용 조건을 표시하고 수락해야 합니다.

ExcelAddIn 프로젝트 종속성을 제외하려면

  1. 솔루션 탐색기OfficeAddInSetup 노드에서 Microsoft .NET Framework 또는 *.Utilities.dll로 끝나는 어셈블리를 제외한 감지된 종속성 항목 아래의 모든 종속 항목을 선택합니다. 유틸리티 어셈블리는 애플리케이션과 함께 배포됩니다.

  2. 그룹을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  3. 속성 창에서 Exclude 속성을 True로 변경하여 설치 프로젝트에서 종속 어셈블리를 제외합니다. 유틸리티 어셈블리를 제외하지 않도록 합니다.

    Screenshot of Solution Explorer showing the dependencies to exclude

    그림 4: 종속성 제외

설치 프로그램(부트스트래퍼라고도 함)을 추가하여 필수 구성 요소를 설치하도록 Windows Installer 패키지를 구성할 수 있습니다. 이 설치 프로그램은 부트스트랩이라는 프로세스인 필수 구성 요소를 설치할 수 있습니다.

ExcelAddIn의 경우 추가 기능을 올바르게 실행하려면 먼저 이러한 필수 구성 요소를 설치해야 합니다.

  • Office 솔루션이 대상으로 하는 Microsoft .NET Framework 버전입니다.
  • Office 런타임용 Microsoft Visual Studio 2010 Tools

종속 구성 요소를 필수 구성 요소로 구성하려면

  1. 솔루션 탐색기에서 OfficeAddInSetup 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  2. OfficeAddInSetup 속성 페이지 대화 상자가 나타납니다.

  3. 필수 구성 요소 단추를 클릭합니다.

  4. 필수 구성 요소 대화 상자에서 올바른 버전의 .NET Framework 및 Microsoft Visual Studio Tools for Office Runtime을 선택합니다.

    Screenshot of the Prerequisites Dialog Box

    그림 5: 필수 구성 요소 대화 상자

    참고 항목

    Visual Studio 설치 프로젝트에서 구성된 필수 구성 요소 패키지 중 일부는 선택한 빌드 구성에 따라 달라집니다. 사용하는 각 빌드 구성에 적합한 필수 구성 요소를 선택해야 합니다.

Microsoft Office는 레지스트리 키를 사용하여 추가 기능을 찾습니다. HKEY_CURRENT_USER 하이브의 키는 각 개별 사용자에 대한 추가 기능을 등록하는 데 사용됩니다. HKEY_LOCAL_MACHINE 하이브 아래의 키는 컴퓨터의 모든 사용자에 대한 추가 기능을 등록하는 데 사용됩니다. 레지스트리 키에 대한 자세한 내용은 VSTO 추가 기능에 대한 레지스트리 항목을 참조하세요.

레지스트리를 구성하려면

  1. 솔루션 탐색기에서 OfficeAddInSetup을 마우스 오른쪽 단추로 클릭합니다.

  2. 보기를 확장합니다.

  3. 레지스트리를 클릭하여 레지스트리 편집기 창을 엽니다.

  4. 레지스트리(OfficeAddInSetup) 편집기에서 HKEY_LOCAL_MACHINE을 확장한 다음, 소프트웨어를 확장합니다.

  5. HKEY_LOCAL_MACHINE\Software 아래에 있는 [제조업체] 키를 삭제합니다.

  6. HKEY_CURRENT_USER를 확장한 다음, 소프트웨어를 확장합니다.

  7. HKEY_CURRENT_USER\Software 아래에 있는 [제조업체] 키를 삭제합니다.

  8. 추가 기능 설치에 대한 레지스트리 키를 추가하려면 사용자/컴퓨터 하이브 키를 마우스 오른쪽 단추로 클릭하고 새 키를 선택합니다. 새 키의 이름에 소프트웨어 텍스트를 사용합니다. 새로 만든 소프트웨어 키를 마우스 오른쪽 단추로 클릭하고 Microsoft 텍스트로 새 키를 만듭니다.

  9. 유사한 프로세스를 사용하여 추가 기능 등록에 필요한 전체 키 계층 구조를 만듭니다.

    User/Machine Hive\Software\Microsoft\Office\Excel\Addins\SampleCompany.ExcelAddIn

    회사 이름은 고유성을 제공하기 위해 추가 기능 이름의 접두사로 자주 사용됩니다.

  10. SampleCompany.ExcelAddIn 키를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 선택한 후 문자열 값을 클릭합니다. 이름에 설명 텍스트를 사용합니다.

  11. 이 단계를 사용하여 세 가지 값을 더 추가합니다.

    • 문자열 형식의 FriendlyName
    • DWORD 형식의 LoadBehavior
    • 문자열 형식의 Manifest
  12. 레지스트리 편집기에서 설명 값을 마우스 오른쪽 단추로 클릭하고 속성 창을 클릭합니다. 속성 창의 Value 속성에 Excel Demo AddIn을 입력합니다.

  13. 레지스트리 편집기에서 FriendlyName 키를 선택합니다. 속성 창에서 Value 속성을 Excel Demo AddIn으로 변경합니다.

  14. 레지스트리 편집기에서 LoadBehavior 키를 선택합니다. 속성 창에서 Value 속성을 3.으로 변경합니다. LoadBehavior의 값 3은 호스트 애플리케이션을 시작할 때 추가 기능을 로드해야 함을 나타냅니다. 부하 동작에 대한 자세한 내용은 VSTO 추가 기능에 대한 레지스트리 항목을 참조하세요.

  15. 레지스트리 편집기에서 매니페스트 키를 선택합니다. 속성 창에서 Value 속성을 file:///[TARGETDIR]ExcelAddIn.vsto|vstolocal로 변경합니다.

    Screenshot of the Registry Editor

    그림 6: 레지스트리 키 설정

    VSTO 런타임은 이 레지스트리 키를 사용하여 배포 매니페스트를 찾습니다. [TARGETDIR] 매크로는 추가 기능이 설치된 폴더로 대체됩니다. 매크로에는 후행 \ 문자가 포함되므로 배포 매니페스트의 파일 이름은 \ 문자가 없는 ExcelAddIn.vsto여야 합니다. vstolocal 접미사는 추가 기능이 ClickOnce 캐시 대신 이 위치에서 로드되어야 함을 VSTO 런타임에 알립니다. 이 접미사가 제거되면 런타임에서 사용자 지정을 ClickOnce 캐시에 복사합니다.

Warning

Visual Studio의 레지스트리 편집기를 사용할 때에는 매우 신중해야 합니다. 예를 들어 실수로 잘못된 키에 대해 DeleteAtUninstall을 설정한 경우, 레지스트리의 활성 부분을 삭제하여 사용자 컴퓨터가 일관되지 않을 수 있으며 더 심한 경우 중단 상태가 될 수 있습니다.

64비트 버전의 Office는 64비트 레지스트리 하이브를 사용하여 추가 기능을 찾습니다. 64비트 레지스트리 하이브에 추가 기능을 등록하려면 설치 프로젝트의 대상 플랫폼을 64비트 전용으로 설정해야 합니다.

  1. 솔루션 탐색기에서 OfficeAddInSetup 프로젝트를 선택합니다.
  2. 속성 창으로 이동하고 TargetPlatform 속성을 x64로 설정합니다.

32비트 및 64비트 버전의 Office용 추가 기능을 설치하려면 두 개의 개별 MSI 패키지를 만들어야 합니다. 32비트용 1개, 64비트용 1개

Screenshot of the Properties Window showing the Target Platform for registering Add-ins with 64-bit Office

그림 7: 64비트 Office에 추가 기능을 등록하기 위한 대상 플랫폼

MSI 패키지를 사용하여 추가 기능 또는 솔루션을 설치하는 경우 필수 구성 요소를 설치하지 않고도 설치할 수 있습니다. 필수 구성 요소가 설치되지 않은 경우 MSI에서 시작 조건을 사용하여 추가 기능의 설치를 차단할 수 있습니다.

VSTO 런타임을 검색하도록 시작 조건 구성

  1. 솔루션 탐색기에서 OfficeAddInSetup을 마우스 오른쪽 단추로 클릭합니다.

  2. 보기를 확장합니다.

  3. 시작 조건을 클릭합니다.

  4. 시작 조건(OfficeAddInSetup) 편집기에서 대상 컴퓨터의 요구 사항을 마우스 오른쪽 단추로 클릭한 다음, 레지스트리 시작 조건 추가를 클릭합니다. 이 검색 조건은 레지스트리에서 VSTO 런타임이 설치하는 키를 검색할 수 있습니다. 그런 다음, 명명된 속성을 통해 설치 관리자의 다양한 부분에서 키 값을 사용할 수 있습니다. 시작 조건은 검색 조건에 정의된 속성을 사용하여 특정 값을 확인합니다.

  5. 시작 조건(OfficeAddInSetup) 편집기에서 RegistryEntry1 검색 조건을 선택하고 조건을 마우스 오른쪽 단추로 클릭한 후 속성 창을 선택합니다.

  6. 속성 창에서 다음 속성을 설정합니다.

    1. (이름) 값을 VSTO 2010 런타임 검색으로 설정합니다.
    2. 속성 값을 VSTORUNTIMEREDIST로 변경합니다.
    3. RegKey 값을 SOFTWARE\Microsoft\VSTO Runtime Setup\v4R로 설정합니다.
    4. Root 속성을 vsdrrHKLM으로 설정된 상태를 유지합니다.
    5. Value 속성을 Version으로 변경합니다.
  7. 시작 조건(OfficeAddInSetup) 편집기에서 Condition1 시작 조건을 선택하고 조건을 마우스 오른쪽 단추로 클릭한 후 속성 창을 선택합니다.

  8. 속성 창에서 다음 속성을 설정합니다.

    1. (이름)VSTO 2010 런타임 가용성 확인으로 설정합니다.

    2. 조건 값을 VSTORUNTIMEREDIST>="10.0.30319"로 변경합니다.

    3. InstallURL 속성을 비워 둡니다.

    4. 메시지Visual Studio 2010 Tools for Office Runtime이 설치되어 있지 않습니다. 추가 기능을 설치하려면 Setup.exe를 실행하세요.로 설정합니다.

      Screenshot of the Properties Window for the Verify Runtime Availability launch condition

      그림 8: 런타임 가용성 확인 시작 조건의 속성 창

위의 시작 조건은 부트스트래퍼 패키지를 통해 설치될 때 VSTO 런타임이 있는지 명시적으로 확인합니다.

Office에서 설치한 VSTO 런타임을 검색하도록 시작 조건 구성

  1. 시작 조건(OfficeAddInSetup) 편집기에서 대상 컴퓨터 검색을 마우스 오른쪽 단추로 클릭한 다음, 레지스트리 검색 추가를 클릭합니다.

  2. RegistryEntry1 검색 조건을 선택하고 조건을 마우스 오른쪽 단추로 클릭한 다음, 속성 창을 선택합니다.

  3. 속성 창에서 다음 속성을 설정합니다.

    1. (이름) 값을 Office VSTO 런타임 검색으로 설정합니다.
    2. 속성 값을 OfficeRuntime으로 변경합니다.
    3. RegKey 값을 SOFTWARE\Microsoft\VSTO Runtime Setup\v4로 설정합니다.
    4. Root 속성을 vsdrrHKLM으로 설정된 상태를 유지합니다.
    5. Value 속성을 Version으로 변경합니다.
  4. 시작 조건(OfficeAddInSetup) 편집기에서 앞에서 정의한 VSTO 2010 런타임 가용성 확인을 선택하고 조건을 마우스 오른쪽 단추로 클릭하고 속성 창을 선택합니다.

  5. Condition 속성 값을 VSTORUNTIMEREDIST >="10.0.30319" OR OFFICERUNTIME>="10.0.21022"로 변경합니다. 버전 번호는 추가 기능에 필요한 런타임 버전에 따라 다를 수 있습니다.

    Screenshot of the Properties Windows for the launch condition

    그림 9: Redist 또는 Office 시작 조건을 통한 런타임 가용성 확인의 속성 창

추가 기능이 .NET Framework 4 이상을 대상으로 하는 경우 참조되는 PIA(주 Interop 어셈블리) 내부의 형식을 VSTO 어셈블리에 포함할 수 있습니다.

Interop 형식이 추가 기능에 포함되는지 확인하려면 다음 단계를 수행합니다.

  1. 솔루션 탐색기의 참조 노드 확장
  2. PIA 참조 중 하나(예: Office)를 선택합니다.
  3. F4 키를 누르거나 어셈블리 상황에 맞는 메뉴에서 속성을 선택하여 속성 창을 봅니다.
  4. Interop 형식 포함 속성의 값을 확인합니다.

값이 True로 설정된 경우 형식이 포함되며 설치 프로젝트를 빌드하려면 섹션을 아래로 건너뛸 수 있습니다.

자세한 내용은 동일 형식 및 포함된 Interop 형식을 참조하세요.

Office PIA를 검색하도록 시작 조건을 구성하려면

  1. 시작 조건(OfficeAddInSetup) 편집기에서 대상 컴퓨터의 요구 사항을 마우스 오른쪽 단추로 클릭한 다음, Windows Installer 시작 조건 추가를 클릭합니다. 이 시작 조건은 특정 구성 요소 ID를 검색하여 Office PIA를 검색합니다.

  2. 구성 요소1 검색을 마우스 오른쪽 단추로 클릭하고 속성 창을 클릭하여 시작 조건의 속성을 표시합니다.

  3. 속성 창에서 다음 속성을 설정합니다.

    1. (이름) 속성 값을 Office 공유 PIA 검색으로 변경
    2. ComponentID 값을 사용 중인 Office 구성 요소의 구성 요소 ID로 변경합니다. 아래 표에서 구성 요소 ID 목록을 찾을 수 있습니다(예: {64E2917E-AA13-4CA4-BFFE-EA6EDA3AFCB4}).
    3. Property 속성의 값을 HASSHAREDPIA로 변경합니다.
  4. 시작 조건(OfficeAddInSetup) 편집기에서 Condition1을 마우스 오른쪽 단추로 클릭하고 속성 창을 클릭하여 시작 조건의 속성을 표시합니다.

  5. Condition1의 다음 속성을 변경합니다.

    1. (이름)Office 공유 PIA 가용성 확인으로 변경합니다.
    2. 조건HASSHAREDPIA로 변경합니다.
    3. InstallUrl을 비워 둡니다.
    4. 메시지Excel과 상호 작용하는 데 필요한 구성 요소를 사용할 수 없습니다. setup.exe를 실행해 주세요로 변경합니다.

    Screenshot of the Properties Window for the Verify Office Shared PIA launch condition

    그림 10: Office 공유 PIA 시작 조건 확인을 위한 속성 창

Microsoft Office용 주 Interop 어셈블리의 구성 요소 ID

주 interop 어셈블리 Office 2010 Office 2013 Office 2013(64비트) Office 2016 Office 2016(64비트)
Excel {EA7564AC-C67D-4868-BE5C-26E4FC2223FF} {C8A65ABE-3270-4FD7-B854-50C8082C8F39} {E3BD1151-B9CA-4D45-A77E-51A6E0ED322A} {C845E028-E091-442E-8202-21F596C559A0} {C4ACE6DB-AA99-401F-8BE6-8784BD09F003}
InfoPath {4153F732-D670-4E44-8AB7-500F2B576BDA} {0F825A16-25B2-4771-A497-FC8AF3B355D8} {C5BBD36E-B320-47EF-A512-556B99CB7E41} - -
Outlook {1D844339-3DAE-413E-BC13-62D6A52816B2} {F9F828D5-9F0B-46F9-9E3E-9C59F3C5E136} {7824A03F-28CC-4371-BC54-93D15EFC1E7F} {2C6C511D-4542-4E0C-95D0-05D4406032F2} {7C6D92EF-7B45-46E5-8670-819663220E4E}
PowerPoint {EECBA6B8-3A62-44AD-99EB-8666265466F9} {813139AD-6DAB-4DDD-8C6D-0CA30D073B41} {05758318-BCFD-4288-AD8D-81185841C235} {9E73CEA4-29D0-4D16-8FB9-5AB17387C960} {E0A76492-0FD5-4EC2-8570-AE1BAA61DC88}
Visio {3EA123B5-6316-452E-9D51-A489E06E2347} {C1713368-12A8-41F1-ACA1-934B01AD6EEB} {2CC0B221-22D2-4C15-A9FB-DE818E51AF75} {A4C55BC1-B94C-4058-B15C-B9D4AE540AD1} {2D4540EC-2C88-4C28-AE88-2614B5460648}
Word {8B74A499-37F8-4DEA-B5A0-D72FC501CEFA} {9FE736B7-B1EE-410C-8D07-082891C3DAC8} {13C07AF5-B206-4A48-BB5B-B8022333E3CA} {30CAC893-3CA4-494C-A5E9-A99141352216} {DC5CCACD-A7AC-4FD3-9F70-9454B5DE5161}
Microsoft Forms 2.0 {B2279272-3FD2-434D-B94E-E4E0F8561AC4} {B2279272-3FD2-434D-B94E-E4E0F8561AC4} {A5A30117-2D2A-4C5C-B3C8-8897AC32C2AC} - -
Microsoft Graph {011B9112-EBB1-4A6C-86CB-C2FDC9EA7B0E} {52DA4B37-B8EB-4B7F-89C1-824654CE4C70} {24706F33-F0CE-4EB4-BC91-9E935394F510} - -
스마트 태그 {7102C98C-EF47-4F04-A227-FE33650BF954} {487A7921-EB3A-4262-BB5B-A5736B732486} {74EFC1F9-747D-4867-B951-EFCF29F51AF7} - -
Office 공유 {64E2917E-AA13-4CA4-BFFE-EA6EDA3AFCB4} {6A174BDB-0049-4D1C-86EF-3114CB0C4C4E} {76601EBB-44A7-49EE-8DE3-7B7B9D7EBB05} {68477CB0-662A-48FB-AF2E-9573C92869F7} {625F5772-C1B3-497E-8ABE-7254EDB00506}
Project {957A4EC0-E67B-4E86-A383-6AF7270B216A} {1C50E422-24FA-44A9-A120-E88280C8C341} {706D7F44-8231-489D-9B25-3025ADE9F114} {0B6EDA1D-4A15-4F88-8B20-EA6528978E4E} {107BCD9A-F1DC-4004-A444-33706FC10058}

Screenshot of the Final launch conditions

그림 11: 최종 시작 조건

ExcelAddIn 설치를 위한 시작 조건을 더 구체화할 수 있습니다. 예를 들어 실제 대상 Office 애플리케이션이 설치되어 있는지 확인하는 것이 유용할 수 있습니다.

설치 프로젝트를 빌드하려면

  1. 솔루션 탐색기에서 OfficeAddInSetup 프로젝트를 마우스 오른쪽 단추로 클릭하고 빌드를 클릭합니다.
  2. Windows 탐색기를 사용하여 OfficeAddInSetup 프로젝트의 출력 디렉터리로 이동하고 선택한 빌드 구성에 따라 릴리스 또는 디버그 폴더로 이동합니다. 폴더의 모든 파일을 사용자가 액세스할 수 있는 위치로 복사합니다.

ExcelAddIn 설치 프로그램을 테스트하려면

  1. OfficeAddInSetup을 복사한 위치로 이동합니다.
  2. setup.exe 파일을 두 번 클릭하여 OfficeAddInSetup 추가 기능을 설치합니다. 표시되는 소프트웨어 사용 조건에 동의하고 설치 마법사를 완료하여 사용자 컴퓨터에 추가 기능을 설치합니다.

Excel Office 솔루션은 설치 중에 지정된 위치에서 설치하고 실행해야 합니다.

문서 수준 솔루션에 대한 추가 요구 사항

문서 수준 솔루션을 배포하려면 Windows Installer 설치 프로젝트의 몇 가지 구성 단계가 필요합니다.

다음은 문서 수준 솔루션을 배포하는 데 필요한 기본 단계 목록입니다.

  • Visual Studio 설치 프로젝트를 만듭니다.
  • 문서 수준 솔루션의 기본 출력을 추가합니다. 기본 출력에는 Microsoft Office 문서도 포함됩니다.
  • 배포 및 애플리케이션 매니페스트를 느슨한 파일로 추가합니다.
  • 설치 관리자 패키지에서 종속 구성 요소를 제외합니다(유틸리티 어셈블리 제외).
  • 필수 구성 요소 패키지를 구성합니다.
  • 시작 조건을 구성합니다.
  • 설치 프로젝트를 빌드하고 결과를 배포 위치에 복사합니다.
  • 설치 프로그램을 실행하여 사용자 컴퓨터에 문서 수준 솔루션을 배포합니다.
  • 필요한 경우 사용자 지정 문서 속성을 업데이트합니다.

배포된 문서의 위치 변경

Office 문서 내의 속성은 문서 수준 솔루션을 찾는 데 사용됩니다. 문서가 VSTO 어셈블리와 동일한 폴더에 설치된 경우 변경할 필요가 없습니다. 그러나 다른 폴더에 설치된 경우에는 이러한 속성을 설치하는 동안 업데이트해야 합니다.

이러한 문서 속성에 대한 자세한 내용은 사용자 지정 문서 속성 개요를 참조하세요.

이러한 속성을 변경하려면 설치하는 동안 사용자 지정 작업을 수행해야 합니다.

다음 예제에서는 ExcelWorkbookProject라는 문서 수준 솔루션과 ExcelWorkbookSetup이라는 설치 프로젝트를 사용합니다. ExcelWorkbookSetup 프로젝트는 레지스트리 키를 설정하는 경우를 제외하고 위에서 설명한 것과 동일한 단계를 사용하여 구성됩니다.

Visual Studio 솔루션에 사용자 지정 작업 프로젝트를 추가하려면

  1. 솔루션 탐색기에서 Office 문서 배포 프로젝트를 마우스 오른쪽 단추로 클릭하여 .NET Console 프로젝트를 솔루션에 추가합니다.

  2. 추가를 확장하고 새 프로젝트를 클릭합니다.

  3. 콘솔 앱 템플릿을 선택하고 AddCustomizationCustomAction 프로젝트의 이름을 지정합니다.

    Screenshot of the Solution Explorer - AddCustomizationCustomAction

    그림 12: 솔루션 탐색기 - AddCustomizationCustomAction

  4. 다음 어셈블리에 대한 참조를 추가합니다.

    1. System.ComponentModel
    2. System.Configuration.Install
    3. Microsoft.VisualStudio.Tools.Applications
    4. Microsoft.VisualStudio.Tools.Applications.ServerDocument
  5. Program.cs 또는 Program.vb에 이 코드 복사

    using System;
    using System.IO;
    using System.Collections;
    using System.ComponentModel;
    using System.Configuration.Install;
    using Microsoft.VisualStudio.Tools.Applications;
    using Microsoft.VisualStudio.Tools.Applications.Runtime;

    namespace AddCustomizationCustomAction
    {
        [RunInstaller(true)]
        public class AddCustomizations : Installer
        {
            public AddCustomizations() : base() { }

            public override void Install(IDictionary savedState)
            {
                base.Install(savedState);

                //Get the CustomActionData Parameters
                string documentLocation = Context.Parameters.ContainsKey("documentLocation") ? Context.Parameters["documentLocation"] : String.Empty;
                string assemblyLocation = Context.Parameters.ContainsKey("assemblyLocation") ? Context.Parameters["assemblyLocation"] : String.Empty;
                string deploymentManifestLocation = Context.Parameters.ContainsKey("deploymentManifestLocation") ? Context.Parameters["deploymentManifestLocation"] : String.Empty;
                Guid solutionID = Context.Parameters.ContainsKey("solutionID") ? new Guid(Context.Parameters["solutionID"]) : new Guid();

                string newDocLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Path.GetFileName(documentLocation));

                try
                {
                    //Move the file and set the Customizations
                    if (Uri.TryCreate(deploymentManifestLocation, UriKind.Absolute, out Uri docManifestLocationUri))
                    {
                        File.Move(documentLocation, newDocLocation);
                        ServerDocument.RemoveCustomization(newDocLocation);
                        ServerDocument.AddCustomization(newDocLocation, assemblyLocation,
                                                        solutionID, docManifestLocationUri,
                                                        true, out string[] nonpublicCachedDataMembers);
                    }
                    else
                    {
                        LogMessage("The document could not be customized.");
                    }
                }
                catch (ArgumentException)
                {
                    LogMessage("The document could not be customized.");
                }
                catch (DocumentNotCustomizedException)
                {
                    LogMessage("The document could not be customized.");
                }
                catch (InvalidOperationException)
                {
                    LogMessage("The customization could not be removed.");
                }
                catch (IOException)
                {
                    LogMessage("The document does not exist or is read-only.");
                }
            }

            public override void Rollback(IDictionary savedState)
            {
                base.Rollback(savedState);
                DeleteDocument();
            }
            public override void Uninstall(IDictionary savedState)
            {
                base.Uninstall(savedState);
                DeleteDocument();
            }
            private void DeleteDocument()
            {
                string documentLocation = Context.Parameters.ContainsKey("documentLocation") ? Context.Parameters["documentLocation"] : String.Empty;

                try
                {
                    File.Delete(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Path.GetFileName(documentLocation)));
                }
                catch (Exception)
                {
                    LogMessage("The document doesn't exist or is read-only.");
                }
            }
            private void LogMessage(string Message)
            {
                if (Context.Parameters.ContainsKey("LogFile"))
                {
                    Context.LogMessage(Message);
                }
            }

            static void Main() { }
            }
    }

문서에 사용자 지정을 추가하려면 VSTO 문서 수준 솔루션의 솔루션 ID가 있어야 합니다. 이 값은 Visual Studio 프로젝트 파일에서 검색됩니다.

솔루션 ID를 검색하려면

  1. 빌드 메뉴에서 솔루션 빌드를 클릭하여 문서 수준 솔루션을 빌드하고 솔루션 ID 속성을 프로젝트 파일에 추가합니다.

  2. 솔루션 탐색기에서 ExcelWorkbookProject 문서 수준 프로젝트를 마우스 오른쪽 단추로 클릭합니다.

  3. UnloadProject를 클릭하여 Visual Studio 내부의 프로젝트 파일에 액세스합니다.

    Screenshot of Solution Explorer Unloading Excel Document Solution

    그림 13: Excel 문서 솔루션 언로드

  4. 솔루션 탐색기에서 ExcelWorkbookProject를 마우스 오른쪽 단추로 클릭하고 EditExcelWorkbookProject.vbproj 또는 EditExcelWorkbookProject.csproj를 클릭합니다.

  5. ExcelWorkbookProject 편집기에서 PropertyGroup 요소 내의 SolutionID 요소를 찾습니다.

  6. 이 요소의 GUID 값을 복사합니다.

    Retrieving the SolutionID

    그림 14: SolutionID 검색

  7. 솔루션 탐색기에서 ExcelWorkbookProject를 마우스 오른쪽 단추로 클릭하고 프로젝트 다시 로드를 클릭합니다.

  8. 표시되는 대화 상자에서 를 클릭하여 ExcelWorkbookProject 편집기를 닫습니다.

  9. 솔루션 ID는 사용자 지정 설치 작업에 사용됩니다.

마지막 단계는 설치제거 단계에 대한 사용자 지정 작업을 구성하는 것입니다.

설치 프로젝트를 구성하려면

  1. 솔루션 탐색기에서 ExcelWorkbookSetup을 마우스 오른쪽 단추로 클릭하고 추가를 확장한 후 프로젝트 출력을 클릭합니다.

  2. 프로젝트 출력 그룹 추가 대화 상자의 프로젝트 목록에서 AddCustomizationCustomAction을 클릭합니다.

  3. 기본 출력을 선택하고 확인을 클릭하여 대화 상자를 닫고 사용자 지정 작업이 포함된 어셈블리를 설치 프로젝트에 추가합니다.

    Screenshot of the Document Manifest Custom Action - Add Project Output Group window

    그림 15: 문서 매니페스트 사용자 지정 작업 - 프로젝트 출력 그룹 추가

  4. 솔루션 탐색기에서 ExcelWorkbookSetup을 마우스 오른쪽 단추로 클릭합니다.

  5. 보기를 확장하고 사용자 지정 작업을 클릭합니다.

  6. 사용자 지정 작업(ExcelWorkbookSetup) 편집기에서 사용자 지정 작업을 마우스 오른쪽 단추로 클릭하고 사용자 지정 작업 추가를 클릭합니다.

  7. 프로젝트의 항목 선택 대화 상자의 보기 목록에서 애플리케이션 폴더를 클릭합니다. AddCustomizationCustomAction(활성)에서 기본 출력을 선택하고 확인을 클릭하여 설치 단계에 사용자 지정 작업을 추가합니다.

  8. 설치 노드 아래에서 AddCustomizationCustomAction(활성)에서 기본 출력을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭합니다. 내 문서에 문서 복사 및 사용자 지정 첨부 사용자 지정 작업의 이름을 지정합니다.

  9. 제거 노드 아래에서 AddCustomizationCustomAction(활성)에서 기본 출력을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭합니다. 문서 폴더에서 문서 제거 사용자 지정 작업의 이름을 지정합니다.

    Screenshot of the Document Manifest Custom Actions window

    그림 16: 문서 매니페스트 사용자 지정 작업

  10. 사용자 지정 작업(ExcelWorkbookSetup) 편집기에서 문서를 내 문서에 복사하고 사용자 지정 첨부를 마우스 오른쪽 단추로 클릭하고 속성 창을 클릭합니다.

  11. CustomActionData속성 창에서 사용자 지정 DLL의 위치, 배포 매니페스트 및 Microsoft Office 문서의 위치를 입력합니다. SolutionID도 필요합니다.

  12. 설치 오류를 파일에 기록하려면 LogFile 매개 변수를 포함합니다. s

    /assemblyLocation="[INSTALLDIR]ExcelWorkbookProject.dll" /deploymentManifestLocation="[INSTALLDIR]ExcelWorkbookProject.vsto" /documentLocation="[INSTALLDIR]ExcelWorkbookProject.xlsx" /solutionID="Your Solution ID" /LogFile="[TARGETDIR]Setup.log"
    

    Screenshot of the Custom Action to Copy Document to My Documents Properties window

    그림 17: 문서를 내 문서에 복사하는 사용자 지정 작업

  13. 제거를 위한 사용자 지정 작업에는 문서 이름이 필요하며 CustomActionData에서 동일한 documentLocation 매개 변수를 사용하여 제공할 수 있습니다.

    /documentLocation="[INSTALLDIR]ExcelWorkbookProject.xlsx"
    
  14. ExcelWorkbookSetup 프로젝트를 컴파일하고 배포합니다.

  15. 내 문서 폴더를 살펴보고 ExcelWorkbookProject.xlsx 파일을 엽니다.

추가 리소스

방법: Visual Studio Tools for Office Runtime 설치

Office Primary Interop Assemblies

VSTO 추가 기능에 대한 레지스트리 항목

Custom Document Properties Overview

Windows 레지스트리에서 양식 영역 지정

Granting Trust to Documents

저자 정보

Wouter van Vugt는 Office Open XML 기술을 보유한 Microsoft MVP이자 SharePoint, Microsoft Office 및 관련 .NET 기술을 사용하여 OBA(Office 비즈니스 애플리케이션)를 만드는 데 중점을 둔 독립 컨설턴트입니다. Wouter는 MSDN과 같은 개발자 커뮤니티 사이트에 자주 참여합니다. 그는 여러 백서와 기사를 게재했으며 Open XML: Explained라는 제목의 전자책을 출간했습니다. Wouter는 Code-Counsel의 창립자로, 네덜란드에 소재한 이 회사는 다양한 채널을 통해 최첨단 기술 콘텐츠를 제공하는 데 주력합니다. Wouter에 대한 자세한 내용은 그의 블로그를 참조하세요.

Ted Pattison은 SharePoint MVP, 저자, 트레이너이자 Ted Pattison Group의 창립자입니다. 2005년 가을, Ted는 Windows SharePoint Services 3.0 및 Microsoft Office SharePoint Server 2007용 Ascend 개발자 교육 커리큘럼을 작성하기 위해 Microsoft의 Developer Platform Evangelism 그룹에 고용되었습니다. 그 이후로 Ted는 SharePoint 2007 기술에 대한 전문 개발자 교육에 전적으로 집중해 왔습니다. Ted는 비즈니스 솔루션을 빌드하기 위한 개발 플랫폼으로 SharePoint를 사용하는 방법에 중점을 둔 Inside Windows SharePoint Services 3.0이라는 Microsoft Press의 책 집필을 마쳤습니다. 또한 Ted는 Office Space라는 MSDN Magazine에 개발자 중심 칼럼을 기고하고 있습니다.