사용자 기반 설치 - 개발자 가이드

UDI(사용자 기반 설치)는 Microsoft System Center 2012 R2 Configuration Manager OSD(운영 체제 배포) 기능을 사용하는 컴퓨터에 Windows 8.1 ® 같은 Windows® 클라이언트 운영 체제의 배포를 간소화하는 데 도움이 됩니다. UDI는 MDT(Microsoft 배포 도구 키트)의 일부입니다.

소개

일반적으로 OSD 기능을 사용하여 운영 체제를 배포하는 경우 운영 체제를 배포하는 데 필요한 모든 정보를 제공해야 합니다. 정보는 구성 파일 또는 데이터베이스(예: CustomSettings.ini 파일 또는 MDT 데이터베이스 [MDT DB])에서 구성됩니다. 배포를 시작하기 전에 모든 구성 설정을 제공해야 합니다.

UDI는 배포를 수행하기 직전에 구성 정보를 제공할 수 있는 마법사 기반 인터페이스를 제공합니다. 이 동작을 사용하면 일반 OSD 작업 순서를 만든 다음 배포 시 컴퓨터 관련 정보를 제공하여 배포 프로세스에서 더 큰 유연성을 제공할 수 있습니다.

대상

이 가이드는 UDI 마법사에 대한 사용자 지정 마법사 페이지를 만드는 개발자와 UDI 마법사 디자이너의 사용자 지정 마법사 페이지 편집기를 위해 작성되었습니다. 이 가이드에서는 다음을 사용하여 Windows 애플리케이션을 개발하는 데 익숙하다고 가정합니다.

  • 사용자 지정 마법사 페이지를 만드는 데 사용되는 C++입니다.

  • 사용자 지정 마법사 페이지 편집기를 만드는 데 사용되는 Microsoft .NET Framework

  • 사용자 지정 마법사 페이지 편집기를 만드는 데 사용되는 WPF(Windows Presentation Foundation)

  • 사용자 지정 마법사 페이지 편집기를 만드는 데 사용되는 C#, C++또는 Microsoft Visual Basic® .NET과 같이 WPF에서 지원하는 언어

이 가이드 정보

이 가이드에서는 조직의 UTI를 사용자 지정하는 데 필요한 참조 정보를 제공합니다. 이 가이드에서는 MDT 설치(UDI 포함), 운영 체제 및 애플리케이션을 배포하도록 UDI 구성 또는 UDI 마법사를 사용하여 배포 수행과 같은 관리 또는 운영 항목에 대해서는 설명하지 않습니다. 이러한 항목에 대한 자세한 내용은 MDT에 포함된 Microsoft 배포 도구 키트 사용의 UDI 항목을 참조하세요.

UDI 개발 개요

UDI 개발을 통해 UDI에서 제공하는 기능을 확장할 수 있습니다. 일반적으로 UDI 배포 프로세스에서 사용하는 추가 정보를 수집하려면 UDI 개발이 필요합니다. 이 추가 정보는 일반적으로 작업 순서가 UDI 작업 순서에서 Configuration Manager 읽는 작업 순서 변수로 저장됩니다.

UDI 아키텍처

UDI 개발의 개략적인 목표는 UDI 마법사에 표시할 수 있는 사용자 지정 마법사 페이지를 만드는 것입니다. 사용자 지정 마법사 페이지를 만들면 조직의 비즈니스 및 기술 요구 사항에 맞게 UDI의 기존 기능을 확장할 수 있습니다. 사용자 지정 마법사 페이지는 UDI에서 제공하는 마법사 페이지 외에 또는 그 대신 정보를 수집합니다.

그림 1은 UDI 마법사 디자이너와 UDI 마법사 간의 관계를 보여 줍니다.

그림 1. UDI 마법사와 UDI 마법사 디자이너 간의 관계 그림 1. UDI 마법사와 UDI 마법사 디자이너 간의 관계

그림 1. UDI 마법사와 UDI 마법사 디자이너 간의 관계

개념적 수준에서 UDI 개발에는 다음의 생성이 포함됩니다.

  • 사용자 지정 마법사 페이지. 마법사 페이지는 UDI 마법사에 표시되며 배포 프로세스를 완료하는 데 필요한 정보를 수집합니다. Microsoft Visual Studio에서 C++를 사용하여 마법사 페이지를 만듭니다®. 사용자 지정 마법사 페이지는 UDI 마법사가 읽는 DLL로 구현됩니다. UDI SDK(소프트웨어 개발 키트)에는 사용자 지정 마법사 페이지를 만드는 방법의 예가 포함되어 있습니다.

  • 사용자 지정 마법사 페이지 편집기. 마법사 페이지 편집기를 사용하여 사용자 지정 마법사 페이지의 동작을 구성합니다. 사용자 지정 마법사 페이지 편집기가 UDI 마법사 디자이너가 읽는 DLL로 구현됩니다. 다음을 사용하여 마법사 페이지 편집기를 만듭니다.

    • WPF 버전 4.0

    • Microsoft Prism 버전 4.0

    • Microsoft Unity 애플리케이션 블록(Unity) 버전 2.1

      MDT에는 UDI 마법사 디자이너에서 사용할 사용자 지정 마법사 페이지 편집기를 만드는 데 필요한 모든 어셈블리가 포함됩니다. UDI SDK에는 사용자 지정 마법사 페이지 편집기를 만드는 방법의 예가 포함되어 있습니다.

    또한 UDI 마법사 디자이너는 지원 마법사 페이지 편집기 구성 파일을 사용합니다. 사용자 지정 마법사 페이지 및 사용자 지정 마법사 페이지 편집기를 만드는 프로세스의 일부로 마법사 페이지 편집기 구성 파일을 만듭니다. UDI 마법사 디자이너는 UDI 마법사 구성 파일 및 해당 .app 파일에 필요한 XML 정보를 만듭니다.

UDI 개발 환경 준비

사용자 지정 마법사 페이지 및 마법사 페이지 편집기 만들기를 시작하기 전에 다음 단계를 수행하여 UDI 개발 환경을 준비합니다.

  1. UDI 개발 환경 준비 필수 구성 요소에 설명된 대로 UDI 개발 환경 필수 구성 요소를 준비합니다.

  2. UDI 개발 환경 구성에 설명된 대로 UDI 개발 환경을 구성합니다.

  3. UDI 개발 환경 확인에 설명된 대로 UDI 개발 환경이 올바르게 구성되었는지 확인합니다.

UDI 개발 환경 필수 구성 요소 준비

UDI 개발 환경 필수 구성 요소를 준비하려면 다음 단계를 수행합니다.

  1. UDI 개발 환경 하드웨어 필수 구성 요소 준비에 설명된 대로 UDI 개발 환경 하드웨어 필수 구성 요소를 준비합니다.

  2. UDI 개발 환경 소프트웨어 필수 구성 요소 준비에 설명된 대로 UDI 개발 환경 소프트웨어 필수 구성 요소를 준비합니다.

UDI 개발 환경 하드웨어 필수 구성 요소 준비

UDI 개발 환경 하드웨어 필수 구성 요소는 사용 중인 Microsoft Visual Studio 버전에 대해 동일한 하드웨어 요구 사항입니다. 이러한 요구 사항에 대한 자세한 내용은 Visual Studio 설명서의 각 버전에 대한 시스템 요구 사항을 참조하세요.

UDI 개발 환경 소프트웨어 필수 구성 요소 준비

UDI 개발 환경에는 다음과 같은 소프트웨어 필수 구성 요소가 있습니다.

  • Visual Studio 2010에서 지원하는 모든 Windows 운영 체제(Windows 7 또는 Windows Server® 2008 R2를 사용하는 것이 좋습니다.)

    개발하려는 프로세서 아키텍처를 지원하는 Windows 운영 체제가 필요합니다. 64비트 운영 체제를 사용하여 32비트 및 64비트 UDI 개발을 수행할 수 있습니다. 32비트 운영 체제에서만 32비트 UDI 개발을 수행합니다. 이러한 이유로 64비트 운영 체제를 사용해야 합니다.

    참고

    Windows 운영 체제의 IntelItanium 버전(IA-64)은 UDI 개발 환경에서 지원되지 않습니다.

    Visual Studio 2010에서 지원하는 운영 체제에 대한 자세한 내용은 Visual Studio 설명서의 각 버전에 대한 시스템 요구 사항을 참조하세요.

  • Microsoft .NET Framework 버전 4.0(Visual Studio 2010에 필요)

  • C++ 언어(UDI 마법사 페이지 확장에 사용되는 언어)

  • WPF에서 지원하는 기타 언어(예: C#, Visual Basic .NET 또는 C++/공용 언어 인프라)는 UDI 마법사 디자이너 마법사 페이지 편집기를 확장하는 데 사용됩니다.

    참고

    UDI 마법사 디자이너 페이지 편집기 샘플 소스 코드는 C#으로 작성되었습니다. 샘플 소스 코드를 사용하려는 경우 C# 언어를 설치합니다.

UDI 개발 환경 구성

그런 다음 UDI 개발 환경 필수 구성 요소가 충족되면 다음 단계를 수행하여 UDI 개발 환경을 구성합니다.

  1. Visual Studio 2010을 설치합니다.

    C++ 언어 및 WPF에서 지원하는 다른 언어를 설치해야 합니다.

    참고

    UDI 마법사 디자이너 편집기 페이지의 샘플 소스 코드는 C#으로 작성됩니다. 샘플 소스 코드를 사용하려는 경우 C# 언어를 설치합니다.

    Visual Studio 2010 설치에 대한 자세한 내용은 Visual Studio 설치를 참조하세요.

  2. MDT를 설치합니다.

    MDT를 설치하는 방법에 대한 자세한 내용은 MDT 문서 Microsoft 배포 도구 키트를 사용하여 "MDT 설치 또는 업그레이드" 섹션을 참조하세요.

  3. Windows 탐색기에서 local_folder 만듭니다(여기서 local_folder 개발 컴퓨터의 로컬 드라이브에 있는 폴더임).

  4. installation_folder\SDK 폴더를 local_folder 복사합니다(여기서 installation_folder MDT를 설치한 폴더이고 local_folder 개발 컴퓨터의 로컬 드라이브에 있는 폴더임).

    MDT가 프로그램 파일 폴더에 설치되어 있으므로 관리자 권한 없이는 쓸 수 없으므로 SDK 폴더를 다른 위치에 복사합니다. SDK 폴더를 다른 위치에 복사하면 상승된 권한 없이 SDK 폴더의 파일을 수정할 수 있습니다.

  5. installation_folder\Templates\Distribution\Tools 폴더를 local_folder 복사합니다(여기서 installation_folder MDT를 설치한 폴더이고 local_folder 프로세스의 앞부분에서 만든 폴더임).

  6. local_folder\Tools 폴더의 이름을 local_folder\OSDSetupWizard(여기서 local_folder 프로세스의 앞부분에서 만든 폴더)로 바꿉니다.

    완료되면 local_folder 아래의 폴더 구조는 그림 2에 설명된 폴더 구조와 같아야 합니다(여기서 local_folder 프로세스의 앞부분에서 만든 폴더이며 그림에 UDIDevelopment 로 표시됨).

    그림 2. UDI 개발을 위한 폴더 구조 그림 2. UDI 개발을 위한 폴더 구조

    그림 2. UDI 개발을 위한 폴더 구조

UDI 개발 환경 확인

UDI 개발 환경이 구성되면 샘플 프로젝트가 Visual Studio 2010에서 올바르게 빌드되었는지 확인하여 UDI 개발 환경이 올바르게 구성되었는지 확인합니다.

다음 여부를 확인하여 UDI 개발 환경이 올바르게 구성되었는지 확인합니다.

SamplePage 프로젝트가 올바르게 빌드되는지 확인

SamplePage 프로젝트는 UDI 마법사에 대한 사용자 지정 마법사 페이지를 만드는 방법의 예를 제공합니다. SamplePage 프로젝트에 대한 자세한 내용은 SamplePage Visual Studio 솔루션 검토를 참조하세요.

SamplePage 프로젝트가 올바르게 빌드되는지 확인하려면

  1. Visual Studio 2010을 시작합니다.

  2. SamplePage 프로젝트를 엽니다.

    SamplePage 프로젝트는 local_folder\SDK\UDI\SamplePage 폴더에 있습니다(여기서 local_folder 프로세스의 앞부분에서 만든 폴더임).

  3. Visual Studio 2010의 솔루션 탐색기 SamplePage 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

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

  4. SamplePage 속성 페이지 대화 상자에서 구성 속성/디버깅으로 이동합니다.

  5. 디버깅 속성의 구성에서 모든 구성을 선택합니다.

  6. 디버깅 속성의 명령에서 $(TargetDir)\OSDSetupWizard.exe 입력합니다.

  7. 디버깅 속성의 작업 디렉터리에서 $(TargetDir)를 입력합니다.

  8. SamplePage 속성 페이지 대화 상자에서 구성 속성/빌드 이벤트/빌드 후 이벤트로 이동합니다.

  9. 빌드 후 이벤트 속성의 명령줄에서 다음을 입력합니다.

    copy /y "$(ProjectDir)..\..\..\..\OSDSetupWizard\x86\*.*" "$(TargetDir)"  
    xcopy /y /i "$(ProjectDir)..\..\..\..\OSDSetupWizard\x86\en-us" "$(TargetDir)en-us"  
    copy /y "$(ProjectDir)..\..\..\..\OSDSetupWizard\OSDResults\Images\UDI_Wizard_Banner.bmp" "$(ProjectDir)header.bmp"  
    copy /y "$(ProjectDir)Config.xml" "$(TargetDir)"  
    copy /y "$(ProjectDir)header.bmp" "$(TargetDir)header.bmp"  
    
  10. SamplePage 속성 페이지 대화 상자에서 확인을 클릭합니다.

  11. 프로젝트를 저장합니다.

  12. 디버그 메뉴에서 디버깅 시작을 클릭합니다.

    Microsoft Visual Studio대화 상자는 원본이 만료되었음을 나타내며 프로젝트를 빌드할지 여부를 묻습니다.

  13. Microsoft Visual Studio 대화 상자에서 예를 클릭합니다.

    디버깅 정보 없음 대화 상자는 OSDSetupWizard.exe 사용할 수 있는 디버깅 정보가 없음을 알리는 대화 상자가 나타납니다.

  14. 디버깅 정보 없음 대화 상자에서 예를 클릭합니다.

    UDI 마법사가 열리고 사용자 지정 마법사 페이지가 표시됩니다.

  15. 위치 선택에서 값을 선택할 수 있는지 확인합니다.

  16. 샘플 페이지 양식이 있는 마법사에서 취소를 클릭합니다.

    취소 마법사 대화 상자가 나타납니다.

  17. 취소 마법사 대화 상자에서 예를 클릭합니다.

  18. Visual Studio 2010을 닫습니다.

SampleEditor 프로젝트가 올바르게 빌드되는지 확인합니다.

SampleEditor 프로젝트는 UDI 마법사 디자이너에 대한 사용자 지정 마법사 페이지 편집기를 만드는 방법의 예를 제공합니다. SampleEditor 프로젝트에 대한 자세한 내용은 SamplePage Visual Studio 솔루션 검토를 참조하세요.

SampleEditor 프로젝트가 올바르게 빌드되는지 확인하려면

  1. Visual Studio 2010을 시작합니다.

  2. SampleEditor 프로젝트를 엽니다.

    SampleEditor 프로젝트는 local_folder\SDK\UDI\SampleEditor 폴더에 있습니다(여기서 local_folder 프로세스의 앞부분에서 만든 폴더임).

  3. Visual Studio 2010의 솔루션 탐색기 SampleEditor 프로젝트를 선택합니다.

  4. 프로젝트 메뉴에서 참조 추가를 클릭합니다.

    참조 추가 대화 상자가 열립니다.

  5. 참조 추가 대화 상자에서 찾아보기 탭을 클릭합니다.

  6. 찾아보기 탭에서 installation_folder\Bin으로 이동합니다(여기서 installation_folder MDT를 설치한 폴더임). 다음 파일을 선택한 다음 확인을 클릭합니다.

    • Microsoft.Enterprise.UDIDesigner.Common.dll

    • Microsoft.Enterprise.UDIDesigner.DataService.dll

    • Microsoft.Enterprise.UDIDesigner.Infrastructure.dll

    • Microsoft.Practices.Prism.dll

    • Microsoft.Practices.ServiceLocation.dll

    • Microsoft.Practices.Unity.dll

    • RibbonControlsLibrary.dll

    참고

    파일을 클릭하는 동안 Ctrl 키를 누른 채 찾아보기 탭에서 여러 파일을 선택할 수 있습니다.

  7. 솔루션 탐색기 SampleEditor/References로 이동합니다.

  8. 참조에 경고 또는 오류가 없는지 확인합니다.

  9. 솔루션 탐색기 SampleEditor 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

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

  10. SampleEditor 속성 페이지 대화 상자에서 디버그 탭을 클릭합니다.

  11. 디버그 탭에서 외부 프로그램 시작을 클릭합니다.

  12. 외부 프로그램 시작에서 installation_folder\Bin\UDIDesigner.exe (여기서 installation_folder MDT를 설치한 폴더)를 입력한 다음 확인을 클릭합니다.

    줄임표(...) 단추를 클릭하여 폴더를 찾아 UDIDesigner.exe 선택할 수 있습니다.

  13. 파일 메뉴에서 모두 저장을 클릭합니다.

  14. local_folder\SDK\SamplePage\SamplePage.dll.config 파일을 installation_folder\Bin\Config 폴더에 복사합니다(여기서 local_folder 구성 프로세스의 앞부분에서 개발 컴퓨터에서 만든 폴더이고installation_folder MDT를 설치한 폴더임).

  15. Visual Studio 2010의 디버그 메뉴에서 디버깅 시작을 클릭합니다.

    UDI 마법사 디자이너가 시작됩니다.

  16. UDI 마법사 디자이너의 리본 메뉴에서 열기를 클릭합니다.

    열기 대화 상자가 나타납니다.

  17. 열기 대화 상자에서 local_folder\SDK\SamplePage\SamplePage\Config.xml 파일을 엽니다(여기서 local_folder 구성 프로세스의 앞부분에서 개발 컴퓨터에서 만든 폴더임).

    Config.xml 파일이 열리고 사용자 지정 스테이지 그룹이 세부 정보 창에 표시됩니다.

  18. 세부 정보 창에서 구성 탭을 클릭합니다.

  19. 다음을 포함하여 위치 상자에 대한 구성 정보를 검토합니다.

    • 위치 상자를 사용하거나 사용하지 않도록 설정하는 잠금 해제 단추

    • 위치 상자에 표시할 기본값을 입력하는 기본값 상자

    • 요약 페이지에 표시되는 정보에 대한 캡션을 입력하는 친숙한 표시 이름

    • 가능한 위치 목록이 포함된 위치 목록 상자

  20. UDI 마법사 디자이너를 닫습니다.

  21. Visual Studio 2010을 닫습니다.

UDI SDK 예제 검토

개발을 시작하기 전에 UDI SDK에 제공된 예제를 검토합니다. 이 가이드의 정보와 예제의 소스 코드를 사용하여 사용자 고유의 UDI 사용자 지정 마법사 페이지 및 마법사 페이지 편집기를 만들 수 있습니다.

다음을 검토하여 UDI SDK 예제를 살펴봅니다.

SDK 폴더의 내용 검토

UDI 개발 환경을 구성하는 동안 MDT를 설치한 폴더에서 만든 다른 폴더로 SDK 폴더를 복사했습니다. 표 1은 SDK 폴더 바로 아래에 있는 폴더를 나열하고 각각에 대한 간략한 설명을 제공합니다.

표 1. UDI SDK의 폴더

폴더 이 폴더에는 다음이 포함됩니다.
포함 항목 UDI 마법사에 대한 사용자 지정 마법사 페이지를 만드는 데 필요한 C++ 헤더 파일
라이브러리 사용자 지정 페이지에 연결될 C++ 라이브러리 파일입니다. 정적 링크 라이브러리에는 32비트 및 64비트 버전이 있습니다. 참고: 라이브러리의 Itanium 버전(IA-64)은 사용할 수 없습니다.
SampleEditor C로 작성된 UDI 마법사 디자이너에서 SamplePage 페이지를 편집하는 데 사용되는 사용자 지정 편집기를 빌드하기 위한 Visual Studio 프로젝트 #
SamplePage Visual C++로 작성된 사용자 지정 UDI 마법사 페이지를 빌드하기 위한 Visual Studio 프로젝트

SamplePage Visual Studio 솔루션 검토

사용자 지정 마법사 페이지 및 마법사 페이지 편집기 만들기를 시작하기 전에 다음 작업을 수행하여 UDI 개발 환경을 준비합니다.

마법사 페이지 수명 주기 검토

UDI 마법사 페이지에는 페이지의 수명 주기의 각 단계(또는 단계)에 해당하는 메서드가 있습니다. 사용자 지정 마법사 페이지를 만드는 과정의 일부로 이러한 메서드를 코드로 재정의해야 합니다. 표 2에는 재정의해야 하는 메서드가 나열되어 있으며 마법사 페이지 수명 주기에서 메서드를 사용하는 경우를 포함하여 각 메서드에 대한 간략한 설명이 나와 있습니다.

표 2. 마법사 페이지 수명 주기의 메서드

방법 설명
OnWindowCreated 이 메서드는 페이지의 창을 만든 후 한 번 호출됩니다.

이 메서드의 경우 페이지를 처음으로 초기화하고 한 번만 수행해야 하는 코드를 작성합니다. 예를 들어 이 메서드를 사용하여 필드를 초기화하거나 UDI 마법사 구성 파일의 Setter 요소에서 구성 정보를 읽습니다.
OnWindowShown 이 메서드는 페이지가 UDI 마법사에 표시(표시)될 때마다 호출됩니다. 페이지가 처음 표시될 때와 마법사에서 다음 또는 뒤로 를 클릭하여 페이지로 이동할 때마다 호출됩니다.

이 메서드의 경우 표시할 페이지를 준비하는 코드를 작성합니다(예: 메모리 변수, 작업 순서 변수 또는 환경 변수를 읽은 다음 해당 변수의 변경 내용에 따라 페이지 업데이트).
OnCommonControlEvent 마법사 페이지가 표시되고 자식(일반적으로 일반적인 컨트롤)으로부터 WM_NOTIFY 메시지를 받을 때마다 이 메서드를 호출할 수 있습니다.

이 메서드의 경우 알림 메시지를 기반으로 WM_NOTIFY 처리하는 코드를 작성합니다. 예를 들어 TreeView 컨트롤에 대한 클릭 또는 두 번 클릭 이벤트에 응답하는 등 일반적인 컨트롤의 이벤트에 응답할 수 있습니다.
OnUnhandledEvent 이 메서드는 마법사 페이지에 대해 처리되지 않은 창 메시지가 발생할 때마다 호출됩니다. 이 메서드는 처리되지 않은 이러한 창 메시지를 가로채 처리할 수 있는 기회를 제공합니다.

이 메서드의 경우 마법사 페이지와 연결된 창 메시지를 처리하는 코드를 작성합니다. 일반적으로 이 메서드를 재정의할 필요가 없습니다.
OnNextClicked 마법사에서 다음 을 클릭하면 이 메서드가 호출됩니다.

이 메서드의 경우 다음 마법사 페이지로 이동하기 전에 필요한 작업을 수행하는 코드를 작성합니다(예: 시간이 오래 걸릴 수 있는 유효성 검사 수행). 유효성 검사가 실패하면 다음 요청을 취소하고 메시지를 표시할 수 있습니다.
OnWindowHidden 이 메서드는 이전 또는 다음 마법사 페이지가 표시 될 때 페이지를 숨길 때마다 호출 됩니다.

이 메서드의 경우 다른 페이지가 표시되기 전에 페이지를 숨기기 전에 작업을 수행하는 코드를 작성합니다. 일반적으로 이 메서드를 재정의할 필요가 없습니다.

SamplePage 예제 검토

SamplePage 예제의 마법사 페이지 수명 주기 동안의 이벤트 시퀀스를 나타내는 다음 목록을 사용하여 SamplePage 예제를 검토합니다.

  1. UDI 마법사(OSDSetupWizard.exe)는 1단계: UDI 마법사(OSDSetupWizard.exe)에서 설명한 대로 예제(Config.xml 파일)의 UDI 마법사 구성 파일에서 Config.xml 파일을 읽습니다.

  2. UDI 마법사는 2단계: UDI 마법사 사용자 지정 마법사 페이지에 대한 DLL 로드에 설명된 대로 UDI 마법사 구성 파일에 나열된 각 마법사 페이지에 필요한 DLL을 로드합니다.

  3. UDI 마법사는 사용자 지정 마법사 페이지를 표시하고 3단계: UDI 마법사에 설명된 대로 원하는 컨트롤 상호 작용을 허용 합니다. 사용자 지정 마법사 페이지를 표시합니다.

  4. 사용자 지정 마법사 페이지에서 정보를 수집한 경우 다음 을 클릭하기 전에 필요한 작업을 수행하여 4단계: 사용자 지정 마법사 페이지에서 다음 단추 클릭에 설명된 대로 다음 마법사로 진행합니다.

1단계: UDI 마법사(OSDSetupWizard.exe)가 Config.xml 파일을 읽습니다.

UDI 마법사(OSDSetupWizard.exe)가 시작되면 기본적으로 UDI 마법사의 기본 구성 파일인 UDIWizard_Config.xml 파일인 UDI 마법사 구성 파일을 읽습니다.

참고

이 예제에서는 Config.xml 파일을 구성 파일로 사용합니다. MDT에서 기본 구성 파일은 구성을 위해 MDT Files 패키지의 Scripts 폴더에 있는 UDIWizard_Config.xml 파일입니다.

UDI 마법사 작업 순서 단계를 수정하여 /definition 매개 변수를 사용하여 UDI 마법사에서 사용하는 기본 구성 파일을 재정의할 수 있습니다. UDI 마법사에서 사용하는 기본 구성 파일을 재정의하는 방법에 대한 자세한 내용은 "UDI 마법사에서 사용하는 구성 파일 재정의"를 참조하세요.

Config.xml 파일의 최상위 요소는

  • DLL 요소

  • Style 요소

  • Pages 요소

  • StageGroups 요소

    UDI 마법사 구성 파일의 스키마 및 이러한 각 요소에 대한 자세한 내용은 UDI 마법사 구성 파일 스키마 참조를 참조하세요.

    UDI 마법사는 로드할 .dll 파일을 찾는 DLL 요소를 검사합니다. 이 예제에서는 SamplePage.dll 및 SharedPages.dll 두 개의 .dll 파일이 나열됩니다. 이러한 .dll 파일은 도구\플랫폼 폴더(플랫폼은 32비트 버전의 경우 x86이거나 64비트 버전의 경우 x64)인 OSDSetupWizard.exe 동일한 폴더에 있어야 합니다.

    UDI 마법사는 Pages 요소를 검사 하여 정의된 페이지를 찾습니다. 이 예제에서는 CustomSummaryPage라는 두 페이지가 정의됩니다. Page 요소의 Type 특성은 PageClassIDs.h 파일에 정의되며 사용자 지정 페이지의 형식을 고유하게 정의합니다.

    예제에서 정의된 형식은 Microsoft. SamplePage.LocationPage. 사용자 지정 페이지의 경우 다음을 대체하여 나중에 만들 수 있는 다른 페이지와의 잠재적 충돌을 방지합니다.

  • Microsoft 대신 조직 이름입니다.

  • SamplePage 대신 프로젝트 이름입니다.

  • LocationPage 대신 사용자 지정 마법사 페이지 이름입니다.

2단계: UDI 마법사가 사용자 지정 마법사 페이지에 대한 DLL을 로드합니다.

UDI 마법사가 DLL을 로드할 때 .dll 파일에 구현해야 하는 RegisterFactories 함수를 호출합니다. 예제에서 이 함수는 dllmain.ccp 파일에서 구현됩니다. 만드는 각 마법사 페이지는 RegisterFactories 함수를 구현해야 합니다.

RegisterFactories 함수는 마법사 페이지의 팩터리 클래스를 UDI 마법사의 클래스 팩터리 레지스트리에 등록하는 데 사용됩니다. 클래스 팩터리 는 다른 클래스의 인스턴스를 만들 수 있는 클래스입니다. RegisterFactories 함수는 팩터리 클래스의 새 인스턴스를 만들고 UDI 마법사의 클래스 팩터리 레지스트리에 해당 클래스를 전달하여 마법사에서 해당 팩터리 클래스를 사용할 수 있도록 합니다. UDI 마법사는 사용자 지정 마법사 페이지의 Page 요소의 Type 특성과 일치하는 ID로 등록된 팩터리 클래스를 찾습니다.

이 예제에서 ID는 PageClassIds.h 파일의 ID_Location Microsoft 정의됩니다. SamplePage.LocationPage는 Config.xml 파일의 Page 요소에 대한 Type 특성과 일치합니다. ID_Location dllmain.ccp 파일에 구현된 RegisterFactories 함수에서 매개 변수로 전달됩니다.

Register_name 함수 템플릿을 사용하여 함수를 만들어 새 팩터리 인스턴스 만들기를 간소화하고 새로 만든 인스턴스를 등록할 수 있습니다. Register 함수 템플릿을 사용하여 제공되는 이름 값은 iClassFactory 인터페이스를 구현해야 합니다. ClassFactoryImpl 클래스는 클래스 팩터리를 구현하기 위한 대부분의 세부 정보를 처리합니다.

RegisterFactories 함수를 사용하여 작업 유형 및 유효성 검사기 유형을 등록할 수도 있습니다. 자세한 내용은 다음 항목을 참조하세요.

참고

이 예제에서는 하나의 사용자 지정 마법사 페이지만 포함하고 등록합니다. 이 예제에는 사용자 지정 작업 또는 유효성 검사기가 포함되지 않으므로 사용자 지정 작업 또는 유효성 검사기를 등록하지 않습니다.

3단계: UDI 마법사에 사용자 지정 마법사 페이지 표시

예제의 사용자 지정 마법사 페이지는 LocationPage.cpp 파일에 정의되어 있습니다. 마법사 페이지는 페이지에 있는 대부분의 기능을 제공하는 템플릿 클래스에서 파생됩니다. 모든 마법사 페이지는 IWizardPage 인터페이스를 구현하는 WizardPageImpl 템플릿 클래스에서 파생되어야 합니다. 각 마법사 페이지는 페이지의 요구 사항에 따라 다른 선택적 템플릿 클래스 및 해당 인터페이스를 구현할 수 있습니다.

WizardPageImpl 템플릿 클래스에는 사용자 지정 마법사 페이지를 작성하는 데 도움이 되는 몇 가지 유용한 인터페이스가 있습니다. 사용자 지정 마법사 페이지의 기본 클래스로 WizardPageImpl 템플릿 클래스 를 구현합니다.

사용 가능한 목록의 경우:

  • 마법사 페이지에 대한 템플릿 클래스는 마법사 페이지 도우미 클래스를 참조하세요.

  • 마법사 페이지 템플릿 클래스에 대한 인터페이스는 마법사 페이지 인터페이스를 참조하세요.

    예제의 사용자 지정 마법사 페이지는 WizardPageImpl 템플릿 클래스 에서 파생되며 IWizardPage 인터페이스를 구현합니다. 또한 사용자 지정 마법사 페이지는 IFieldCallback 인터페이스를 구현합니다. 이 두 가지 모두 LocationPage.cpp 파일에서 구현됩니다.

    예제 사용자 지정 마법사 페이지는 다음 메서드를 재정의합니다.

  • OnWindowCreated. 예제 마법사 페이지의 OnWindowCreated 메서드는 다음 메서드를 호출합니다.

    • AddField. 이 메서드는 IDD_LOCATION_PAGE 리소스의 IDC_COMBO_LOCATION 상자 컨트롤을 Config.xml 파일의 Location이라는 Data 요소와 연결합니다.

      AddField 메서드 외에도 AddRadioGroupAddToGroup 메서드를 사용하여 다른 컨트롤 및 동작을 지원할 수 있습니다.

      참고

      InitFields 메서드를 호출하기 전에 AddField, AddRadioGroup 또는 AddToGroup 메서드를 호출해야 합니다.

    • InitFields. 이 메서드를 사용하여 양식에 추가한 필드(컨트롤)를 초기화합니다. 페이지의 포인터는 매개 변수입니다. 이 예제에서는 현재 페이지를 참조하는 포인터가 전달됩니다.

      참고

      포인터의 사용을 지원하려면 WizardPageImpl 템플릿 클래스에서 지원하는 인터페이스 외에도 IFieldCallback 인터페이스를 구현해야 합니다.

      IFieldCallback 인터페이스는 SetFieldDefault 메서드를 호출합니다. 이 메서드는 텍스트 상자 및 확인란 컨트롤 이외의 컨트롤에 대한 기본값을 설정하는 데 사용됩니다. 예제에서 SetFieldDefault 메서드는 Config.xml 파일의 Field 요소에 대해 Default 요소에 지정된 기본값을 기반으로 콤보 상자 컨트롤의 초기 인덱스 를 설정합니다.

      OnWindowCreated 메서드는 IFormController 인터페이스를 사용하여 양식 컨트롤러를 설정합니다. 양식 컨트롤러 설정에 대한 자세한 내용은 양식 설정을 참조하세요.

  • InitLocations. 이 메서드는 Config.xml 파일의 위치 목록에서 콤보 상자를 채웁니다. Confg.xml 파일의 Data 요소 및 자식 DataItem 요소는 가능한 값 목록을 제공합니다.

  • OnNextClicked. 이 메서드는 다음 작업을 수행합니다.

    • SaveFields 메서드를 사용하여 콤보 상자에서 선택한 값으로 TSLocation 작업 순서 변수를 업데이트

    • SaveFields 메서드를 사용하여 요약 페이지에 표시되는 정보를 추가합니다.

4단계: 사용자 지정 마법사 페이지에서 다음 단추를 클릭합니다.

사용자가 사용자 지정 마법사 페이지에서 필드를 완료하면 다음을 클릭하여 OnNextClicked 메서드를 호출합니다. OnNextClicked 메서드는 사용자 지정 마법사 페이지에서 수행된 구성 변경 내용을 기록하는 등 다음 마법사 페이지로 진행하기 전에 필요한 작업을 수행합니다.

예제 사용자 지정 마법사 페이지의 경우 OnNextClicked 메서드에 대한 재정의가 LocationPage.ccp 파일에 구현됩니다. 예제 사용자 지정 마법사 페이지의 OnNextClicked 메서드에서 다음 메서드가 호출됩니다.

  1. InitSection. 이 메서드는 요약 페이지에 표시된 요약 데이터의 머리글(레이블 캡션)을 초기화합니다. 일반적으로 DisplayName() 함수를 사용하여 이 값을 설정할 수 있습니다. 이 캡션과 연결된 데이터는 SaveFields 메서드를 사용하여 저장됩니다.

  2. SaveFields. 이 메서드는 필드 값을 작업 순서 변수 및 요약 페이지에 표시된 데이터에 저장합니다.

SampleEditor Visual Studio 솔루션 검토

사용자 지정 마법사 페이지 및 마법사 페이지 편집기 만들기를 시작하기 전에 다음 단계를 수행하여 UDI 개발 환경을 준비합니다.

UDI 마법사 디자이너 아키텍처 검토

UDI 마법사 디자이너는 WPF, Prism 및 Unity를 사용하여 개발되었습니다. UDI 디자이너는 UDI 마법사(OSDSetupWizard.exe)가 런타임에 읽는 UDI 마법사 구성 파일(UDIWizard_Config.xml)을 편집하는 데 사용됩니다. UDI 마법사 구성 파일의 Pages 요소에는 각 마법사 페이지에 대해 별도의 Page 요소가 있는 페이지 목록이 포함되어 있습니다.

마법사 페이지의 구성 설정을 편집할 때 UDI 마법사 디자이너는 마법사 페이지 유형에 해당하는 사용자 지정 페이지 편집기를 로드합니다. 사용자 지정 마법사 페이지 편집기가 WPF 사용자 컨트롤로 개발됩니다. 사용자 지정 마법사 페이지 편집기 페이지에서는 WPF용 Model-View-ViewModel (MVVM) 디자인 패턴을 사용합니다.

MVVM 디자인 패턴은 사용자 인터페이스(UI, 프레젠테이션)를 표시되는 데이터와 분리하는 데 도움이 됩니다. 데이터는 IDataService 인터페이스의 CurrentPage 속성을 사용하여 액세스되는 UDI 마법사 구성 파일(예제의 Config.xml 파일)의 Page 요소에 대한 외관입니다.

UDI 마법사 디자이너는 DependencyAttribute 를 사용하여 Unity의 종속성 주입 프레임워크를 기반으로 DataService 클래스에 액세스할 수 있습니다. Unity의 종속성 교차 프레임워크에 대한 자세한 내용은 애플리케이션에 몇 가지 수명 주입 - Unity 애플리케이션 블록에 대해 알아보기를 참조하세요.

UDI 마법사 페이지의 구성 가능한 구성 요소 검토

사용자 지정 마법사 페이지를 만들 때 일부 구성 설정은 코드에서 설정될 수 있으며 페이지를 컴파일한 후에는 변경할 수 없습니다. 그러나 다른 구성 설정의 경우 UDI 마법사 디자이너를 사용하여 해당 구성 설정을 변경할 수 있도록 허용해야 합니다.

일반적으로 UDI 마법사 디자이너를 사용하여 구성하려는 구성 설정은 UDI 마법사 구성 파일(예제의 Config.xml 파일)에 저장됩니다. 그러나 필요한 경우 별도의 구성 파일을 만들 수도 있습니다. 별도의 구성 파일을 사용하는 한 가지 예는 애플리케이션 검색 작업 및 ApplicationPage 마법사 페이지 유형에서 사용하는 UDIWizard_Config.xml.app 파일입니다.

다음은 UDI 마법사 디자이너를 사용하여 관리할 수 있는 일반적인 구성 설정 목록입니다.

  • 필드입니다. 필드를 사용하면 사용자가 입력을 제공할 수 있습니다. 필드는 각 필드에 대한 구성 설정을 포함하는 UDI 마법사 구성 파일(UDIWizard_Config.xml)에 필드 요소로 표시됩니다. 해당 마법사 페이지 편집기에서 FieldElementControl을 사용하여 필드에 대한 필드 구성 설정을 편집하는 방법을 제공해야 합니다.

  • 속성입니다. Setter는 Page 요소의 페이지, Field 요소의 필드 또는 Data 또는 DataItem 요소의 데이터와 같은 페이지의 엔터티에 대한 속성을 만드는 데 도움이 됩니다. Setter 요소에서 속성을 구성합니다. 정의하려는 각 속성에 대해 별도의 Setter 요소를 추가합니다. SetterControl을 사용하여 속성을 편집하고 다른 컨트롤을 사용하여 다른 Setter 요소를 구성합니다.

  • 데이터. 데이터는 마법사 페이지 및 기타 구성 요소에서 사용할 정보를 저장하는 데 사용됩니다. Data 또는 DataItem 요소를 사용하여 페이지 또는 필드에 대한 데이터를 정의할 수 있습니다. 데이터는 Data 또는 DataItem 요소를 적절하게 사용하여 플랫 또는 계층 구조로 정의할 수 있습니다. SDK 예제의 Config.xml 플랫 데이터 구조를 빌드하는 방법을 보여 줍니다.

    만드는 사용자 지정 마법사 페이지 편집기에서 이러한 구성 설정을 관리할 수 있어야 합니다.

EditorPage 예제 검토

EditorPage 예제는 UDI 마법사 구성 파일의 SamplePage 마법사 페이지에 대한 구성 설정을 구성하는 데 사용됩니다. EditorPage 예제에는 다음과 같은 기본 구성 요소가 있습니다.

  • 위치 콤보 상자 설정을 구성하는 UI

  • 위치 콤보 상자에 표시되는 가능한 위치 목록에서 위치를 추가하거나 편집하는 UI

  • UDI 마법사 구성 파일에서 읽고 저장한 구성 설정

  • 다른 구성 요소에 대한 코드 지원

    다음 단계를 수행하여 Visual Studio의 EditorPage 예제를 검토합니다.

  1. 검토 마법사 페이지 편집기 로드 및 초기화에 설명된 대로 UDI 마법사 디자이너에서 SampleEditor마법사 페이지 편집기를 로드하고 초기화하는 방법을 검토합니다.

  2. 위치 콤보 상자를 구성하는 데 사용되는 사용자 인터페이스 검토에 설명된 대로 LocationPageEditor.xaml 및 LocationPageEditor.xaml.cs 파일에서 위치 콤보 상자를 편집하는 데 사용되는 UI를 검토합니다.

  3. 가능한 위치 목록을 수정하는 데 사용되는 사용자 인터페이스 검토에 설명된 대로 AddEditLocationView.xaml 및 AddEditLocationView.xaml.cs 파일 의 목록에 위치를 추가하거나 편집하는 데 사용되는 UI를 검토합니다.

  4. 구성 정보를 관리하는 데 사용되는 코드 검토에 설명된 대로 UDI 마법사 구성 파일에 저장된 구성 정보를 관리하는 데 사용되는 코드를 검토합니다.

마법사 페이지 편집기 로드 및 초기화 검토

사용자 지정 마법사 페이지 편집기가 UDI 마법사 디자이너에 필요한 대로 로드됩니다. UDI 마법사 디자이너 구성 파일은 UDI 마법사 디자이너가 시작될 때 로드됩니다. UDI 마법사 디자이너는 install_folder\Bin\Config 폴더( 여기서 install_folder MDT가 설치된 폴더의 이름임)에서 .config 파일 확장명이 있는 파일을 검색합니다.

UDI 개발 환경을 구성하는 동안 SamplePage.dll.confg 파일을 install_folder\Bin\Config 폴더에 복사했습니다. UDI 마법사 디자이너를 시작하면 SamplePage.dll.confg 파일이 찾아 로드됩니다.

UDI 마법사 디자이너는 SamplePage.dll.confg 파일에 있는 Page 요소의 다음 특성을 사용하여 EditorPage 예제를 로드하고 초기화합니다.

  • DesignerAssembly. 이 특성은 로드할 DLL의 이름을 결정합니다. 이 DLL은 install_folder\Bin 폴더인 UDIDesigner.exe 파일과 동일한 폴더에 배치해야 합니다(여기서 install_folder MDT가 설치된 폴더의 이름임).

  • DesignerType. 이 특성은 WPF 사용자 컨트롤을 포함하는 클래스의 Microsoft .NET 형식 이름입니다.

  • 형식입니다. 이 특성을 사용하여 UDI 마법사가 로드하는 사용자 지정 마법사 페이지의 페이지 유형을 구성합니다. UDI 마법사 디자이너는 이 특성을 사용하여 UDI 마법사 구성 파일에서 적절한 Page 요소를 찾습니다.

  • Dll. UDI 마법사 디자이너가 만드는 UDI 마법사 구성 파일에서 DLL 요소를 구성하려면 이 특성을 사용합니다.

  • 설명입니다. 이 특성을 사용하여 마법사 페이지 편집기 정보를 제공합니다. 이 특성의 값은 "페이지 라이브러리"에 마법사 페이지를 추가하는 데 사용되는 UDI 마법사 디자이너의 새 페이지 추가 대화 상자에 표시됩니다.

  • DisplayName. 이 특성을 사용하여 UDI 마법사 디자이너에 표시되는 사용자 지정 마법사 페이지의 이름을 제공합니다. 이 특성의 값은 "페이지 라이브러리"에 마법사 페이지를 추가하는 데 사용되는 UDI 마법사 디자이너의 새 페이지 추가 대화 상자에 표시됩니다.

    예제에서 SamplePage 사용자 지정 마법사 페이지의 형식은 Microsoft. samplePage.LocationPage- Config.xml 파일에 저장됩니다. Config.xml 파일은 local_folder\SDK\SamplePage\SamplePage 폴더에 있습니다(여기서 local_folder 구성 프로세스의 앞부분에서 개발 컴퓨터에서 만든 폴더임).

위치 콤보 상자를 구성하는 데 사용되는 사용자 인터페이스 검토

마법사 페이지 편집기를 로드하고 초기화하면 Microsoft 형식의 페이지가 로드될 때 SampleEditor 마법사 페이지 편집기가 로드됩니다. SamplePage.LocationPage가 편집되었습니다. 페이지 편집기용 UI는 LocationPageEditor.xaml 파일에 저장됩니다.

디자인 탭의 UI와 XAML 탭의 코드를 검사하는 경우 그래픽 UI와 XAML(Extensible Application Markup Language)의 요소와 특성 간의 관계를 확인할 수 있습니다.

예를 들어 XAML에서 Controls:FieldElementControl 요소를 검토하면 해당 UI의 레이아웃과 어떻게 관련되는지 확인할 수 있습니다. Controls:FieldElementControl 요소를 사용하여 FieldElementControl 컨트롤을 정의합니다.

XAML 파일의 바인딩 매개 변수는 샘플 페이지 편집기에서 필드를 UDI 마법사 구성 파일의 정보와 바인딩합니다. 예를 들어 다음 코드는 기본값 텍스트 상자를 UDI 마법사 구성 파일의 Default 요소와 연결합니다(예제의 Config.xml).

<TextBox Text="{Binding FieldData.DefaultValue,  
 UpdateSourceTrigger=PropertyChanged,  
 Mode=TwoWay}"/>  

자세한 내용은 방법: XAML에서 바인딩에 사용할 수 있는 데이터 만들기를 참조하세요.

XAML의 Views:CollectionTControl.ColumnCollectionView 요소를 사용하여 그리드 보기에서 사용 가능한 위치 목록을 편집합니다. CollectionTControl 컨트롤을 사용하여 그리드 보기를 표시하고 그리드 보기를 UDI 구성 파일의 Location이라는 이름으로 Data 요소에 바인딩합니다.

가능한 위치 목록을 수정하는 데 사용되는 사용자 인터페이스 검토

가능한 위치 목록을 수정하기 위한 UI는 다음으로 구성됩니다.

  • 위치 목록 수정을 위한 상황에 맞는 메뉴 및 리본 단추 검토에 설명된 대로 위치 목록에서 항목의 순서를 추가, 편집, 제거 또는 변경할 수 있는 상황에 맞는 메뉴 및 리본 단추

  • 위치 추가 또는 편집 대화 상자 검토에 설명된 대로 위치 목록에서 항목을 추가하거나 편집하도록 선택할 때 시작되는 대화 상자

위치 목록을 수정하기 위한 상황에 맞는 메뉴 및 리본 단추 검토

위치 목록이 포함된 목록 상자를 마우스 오른쪽 단추로 클릭하면 상황에 맞는 메뉴가 표시됩니다. 리본에는 동일한 작업을 수행할 수 있는 해당 단추가 있습니다. LocationPageEditor.xaml 파일의 Views:CollectionsTControl 컨트롤 요소는 수행된 작업 및 다음과 같이 설정한 속성에 따라 호출되는 메서드를 정의합니다.

  • SelectedItem. 이 데이터 바인딩된 속성은 사용자가 목록에서 항목을 선택할 때 활성화됩니다. 이 속성은 LocationPageEditorViewModel.cs 파일에 있으며 CollectionTControl 컨트롤에서 기존 항목을 편집하거나 제거할 때 선택한 항목을 전달하는 데 사용하는 보기 모델의 CurrentLocation 속성에 연결됩니다.

  • AddItemAction. 이 작업은 사용자가 상황에 맞는 메뉴에서 항목 추가 옵션을 클릭하거나 리본 메뉴의 해당 단추를 클릭할 때 수행됩니다. 보기 모델에는 AddLocationAction 개체를 반환하는 속성에 대한 데이터 바인딩이 있습니다. 이 개체는 LocationPageEditorViewModel.cs 파일에 있는 AddLocationCallback 메서드이며 AddEditLocationView.xaml 파일에 대화 상자를 표시합니다.

  • EditItemAction. 이 작업은 사용자가 상황에 맞는 메뉴에서 항목 편집 옵션을 클릭할 때 수행됩니다. View 모델에는 EditLocationAction 개체를 반환하는 속성에 대한 데이터 바인딩이 있습니다. 이 개체는 LocationPageEditorViewModel.cs 파일에 있는 EditLocationCallback 메서드이며 AddEditLocationView.xaml 파일에 대화 상자를 표시합니다.

  • RemoveAction. 이 작업은 사용자가 상황에 맞는 메뉴에서 항목 제거 옵션을 클릭할 때 수행됩니다. View 모델에서 RemoveAction 개체를 반환하는 속성에 대한 데이터 바인딩이 있습니다. 이 개체는 LocationPageEditorViewModel.cs 파일에 있는 EditLocationCallback 메서드이며 위치 삭제를 확인하는 메시지를 표시합니다.

위치 추가 또는 편집 대화 상자 검토

위치 목록에 새 위치를 추가하거나 기존 위치를 편집하면 AddEditLocationView.xaml 파일에 있는 메시지가 표시됩니다. 메시지는 LocationPageEditorViewModel.cs 파일의 ShowDialogWindow 창 메서드를 사용하여 표시됩니다.

AddEditLocationView.xaml 파일의 UI는 다음으로 구성됩니다.

  • 다음 요소를 포함하는 DialogFrame이라는 대화 상자 프레임입니다.

    • 대화 상자 프레임의 DialogTitle 특성을 사용하여 구성하는 제목

    • 승인된 속성의 반환 상태를 True로 설정하는 확인 단추(사용자가 확인을 클릭했는지 여부를 확인하기 위해 LocationPageEditorViewModel.cs 파일의 AddLocationCallback 메서드에서 반환 상태를 확인합니다.)

    • Cancel 단추는 Approved 속성의 반환 상태를 False로 설정합니다(사용자가 취소를 클릭했는지 여부를 확인하기 위해 LocationPageEditorViewModel.cs 파일의 AddLocationCallback 메서드에서 반환 상태를 확인합니다.)

  • 다음을 포함하는 WPF 요소입니다.

    • Content 특성을 사용하여 구성하는 레이블

    • UDI 구성 파일(예제의 Config.xml 파일)에서 이름이 LocationData 요소에 바인딩된 텍스트 상자

구성 정보를 관리하는 데 사용되는 코드 검토

사용자 지정 마법사 페이지의 구성 정보는 UDI 마법사 구성 파일에 저장됩니다. 이 파일은 다음과 같습니다.

  • UDI SDK와 함께 제공된 예제의 Config.xml 파일입니다(이 파일에는 예제에 대한 구성 설정만 포함됨).

  • mdT와 함께 제공되는 UDIWizard_Config.xml 파일은 installation_folder\Templates\Distribution\Scripts 폴더에 저장됩니다(여기서 installation_folder MDT를 설치한 폴더임). 이 파일에는 모든 기본 제공 마법사 페이지 및 단계에 대한 구성 설정이 포함되어 있습니다.

    SampleEditor 예제에서 위치 루틴은 구성 정보를 관리하는 데 도움이 되며 LocationPageEditorViewModel.cs 파일에 있습니다. 위치 루틴은 UDI 마법사 구성 파일에서 위치 목록을 반환합니다. 특히 반환된 목록에는 UDI 마법사 구성 파일의 각 DataItem 요소에 대한 항목이 포함됩니다.

사용자 지정 UDI 마법사 페이지 만들기

사용자 지정 UDI 마법사 페이지를 만들기 위한 개략적인 프로세스는 다음과 같습니다.

  1. SamplePage 솔루션의 복사본을 시작점으로 만듭니다.

  2. 양식에 원하는 컨트롤(필드)을 배치합니다.

  3. 다음 단계를 포함하여 마법사 페이지가 로드될 때( OnWindowCreated 메서드에 대한 재정의) 적절한 작업을 수행하는 코드를 작성합니다.

    1. 폼을 초기화합니다.

    2. 메모리 변수, 작업 순서 변수, 환경 변수 또는 XML 파일 정보(예: Setter 속성)를 읽습니다.

  4. 다음 단계를 포함하여 페이지가 표시되면( OnWindowShown 메서드에 대한 재정의) 적절한 작업을 수행하는 코드를 작성합니다.

    1. 페이지가 3단계에서 로드될 때 읽은 정보에 따라 컨트롤을 사용하거나 사용하지 않도록 설정합니다.

    2. 읽은 정보에 따라 컨트롤 모집단과 같이 3단계에서 로드될 때 읽은 정보에 따라 컨트롤을 업데이트합니다.

  5. 사용자가 마법사 페이지와 상호 작용하는 동안 적절한 작업을 수행하는 코드를 작성합니다.

  6. 다음 단계를 포함하여 사용자가 UDI 마법사에서 다음 ( OnNextClicked 메서드에 대한 재정의)을 클릭할 때 적절한 작업을 수행하는 코드를 작성합니다.

    1. 메모리 변수, 작업 순서 변수, 환경 변수 또는 XML 파일 정보를 업데이트합니다.

    2. 요약 페이지 정보를 업데이트합니다(페이지의 필드에 의해 수행되지 않는 경우).

  7. 솔루션을 빌드합니다.

    만든 DLL 버전이 MDT 설치와 동일한 프로세서 플랫폼인지 확인합니다. 특히 Windows PE(Windows 사전 설치 환경)용 프로세서 플랫폼입니다. UDI 마법사는 다음에서 실행할 수 있습니다.

    • 대상 컴퓨터의 기존 운영 체제입니다. 32비트 또는 64비트 Windows 운영 체제에서 32비트 버전의 마법사 페이지를 실행할 수 있습니다. 그러나 64비트 Windows 운영 체제에서 64비트 버전의 마법사 페이지만 실행할 수 있습니다.

    • 대상 컴퓨터의 Windows PE입니다. Windows PE는 64비트 버전의 Windows PE에서 32비트 애플리케이션 실행을 지원하지 않습니다. 따라서 사용하려는 Windows PE의 각 프로세서 아키텍처에 대한 마법사 페이지에 대한 버전을 빌드해야 합니다.

  8. 사용자 지정 마법사 페이지의 DLL을 installation_folder\Templates\Distribution\Tools\ 플랫폼 폴더에 복사합니다(여기서 installation_folder MDT를 설치한 폴더이고 플랫폼 은 32비트 버전의 경우 x86 이거나 x64 는 64비트 버전용임).

  9. 사용자 지정 페이지 편집기를 만드는 단계를 완료합니다.

사용자 지정 마법사 페이지 편집기 만들기

사용자 지정 UDI 마법사 페이지 편집기를 만들기 위한 개략적인 프로세스는 다음과 같습니다.

  1. SampleEditor 솔루션의 복사본을 시작점으로 만듭니다.

  2. .xaml 파일에서 기본 페이지 편집기 UI를 만듭니다.

  3. 마법사 페이지에서 구성해야 하는 대로 FieldElementControl 컨트롤의 인스턴스를 추가합니다(필요한 경우).

  4. 마법사 페이지에서 필요한 대로 SetterControl 컨트롤의 인스턴스를 구성하도록 추가합니다(필요한 경우).

  5. 구성하려면 마법사 페이지에서 요구하는 대로 CollectionTControl 컨트롤의 인스턴스를 추가합니다(필요한 경우).

  6. IDataService 인터페이스를 추가합니다.

  7. 사용자 지정 마법사 페이지 편집기를 사용하여 구성할 구성 설정에 따라 UDI 마법사 구성 파일을 업데이트하는 적절한 코드를 작성합니다.

  8. .xaml 파일에서 자식 대화 상자를 만들고 마법사 페이지에서 구성해야 하는 대로 IMessageBoxService 인터페이스를 사용하여 기본 페이지 편집기에서 호출합니다.

  9. 구성할 마법사 페이지의 요구 사항에 따라 UDI 마법사 디자이너 리본에 적절한 인터페이스를 추가합니다.

  10. 솔루션을 빌드합니다.

    참고

    만든 DLL 버전이 MDT 설치와 동일한 프로세서 플랫폼인지 확인합니다. 예를 들어 64비트 버전의 MDT를 설치하는 경우 사용자 지정 페이지 편집기의 64비트 버전을 빌드합니다.

  11. UDI 마법사 디자이너 구성 파일을 만들어 필요한 DLL을 로드하고 마법사 페이지 편집기를 해당 마법사 페이지(예제의 SamplePage.dll.config 파일)에 매핑합니다.

    마법사 페이지와 마법사 페이지 편집기 간의 매핑을 수행하는 데 필요한 요소에 대한 자세한 내용은 DesignerMappings 요소, 자식 요소 및 해당 특성을 참조하세요.

  12. 이전 단계에서 만든 UDI 마법사 디자이너 구성 파일을 installation_folder\Bin\Config 폴더에 복사합니다(여기서 installation_folder MDT 버전을 설치한 폴더임).

  13. 사용자 지정 마법사 페이지 편집기용 DLL을 installation_folder\Bin 폴더에 복사합니다(여기서 installation_folder MDT를 설치한 폴더임).

사용자 지정 UDI 작업 만들기

UDI 작업은ITask 인터페이스를 구현하는 C++로 작성된 DLL입니다. UDI 마법사 디자이너 구성 파일(.config 파일)을 만들고 installation_folder\Bin\Config 폴더(여기서 installation_folder MDT를 설치한 폴더)에 배치하여 UDI 마법사 디자이너 작업 라이브러리에 DLL을 등록합니다.

참고

마법사 페이지, 작업 및 유효성 검사기가 포함된 DLL을 동일한 .dll 파일 내에 만들 수 있습니다. DLL의 마법사 페이지, 작업 및 유효성 검사기에 대한 구성 설정을 포함하는 단일 UDI 마법사 디자이너 구성 파일(.config)을 만들 수도 있습니다.

사용자 지정 UDI 작업을 만들려면

  1. ITask 인터페이스 및 다음 메서드를 구현하는 코드를 작성합니다.

    • Init. 이 메서드는 작업을 초기화하기 위해 호출됩니다.

    • 를 실행합니다. 이 메서드는 작업을 실행하기 위해 호출됩니다.

  2. 사용자 지정 작업 클래스 팩터리를 팩터리 레지스트리에 등록하는 코드를 작성합니다.

  3. 사용자 지정 작업에 대한 솔루션을 빌드합니다.

    참고

    만든 DLL 버전이 MDT 설치와 동일한 프로세서 플랫폼인지 확인합니다. 예를 들어 64비트 버전의 MDT를 설치하는 경우 사용자 지정 UDI 작업의 64비트 버전을 빌드합니다.

  4. 다음 발췌와 유사한 UDI 마법사 디자이너 구성 파일의 TaskLibrary 요소 아래에 Task 요소를 만듭니다.

    <Task DLL="OSDRefreshWizard.dll" Description="Discovers supported applications for install." Type="Microsoft.OSDRefresh.AppDiscoveryTask" Name="Application Discovery">  
       <TaskItem Type="Setter" Name="Status Bitmap">  
          <Param Name="BitmapFilename"/>  
       </TaskItem>  
       <TaskItem Type="Setter" Name="Log File">  
          <Param Name="log"/>  
       </TaskItem>  
       <TaskItem Type="Setter" Name="Write Configuration File">  
          <Param Name="writecfg"/>  
       </TaskItem>  
       <TaskItem Type="Setter" Name="Read Configuration File">  
          <Param Name="readcfg"/>  
       </TaskItem>  
    </Task>  
    

    참고

    모든 작업 요소에는 BitmapFilename 매개 변수가 포함되어야 합니다. 작업에 필요한 대로 다른 모든 매개 변수를 지정합니다. 예를 들어 이전 발췌에서 로그 매개 변수는 로그 파일의 위치에 대한 매개 변수를 지정하는 데 사용됩니다.

  5. 이전 단계에서 만든 UDI 마법사 디자이너 구성 파일을 installation_folder\Bin\Config 폴더에 복사합니다(여기서 installation_folder MDT를 설치한 폴더임).

  6. 사용자 지정 작업의 DLL을 installation_folder\Templates\Distribution\Tools\ 플랫폼 폴더에 복사합니다(여기서 installation_folder MDT를 설치한 폴더이고 플랫폼 은 32비트 버전의 경우 x86 이거나 x64 는 64비트 버전용임).

사용자 지정 UDI 유효성 검사기 만들기

UDI 유효성 검사기는IValidator 인터페이스를 구현하는 C++로 작성된 DLL입니다. UDI 마법사 디자이너 구성 파일(.config 파일)을 만들고 installation_folder\Bin\Config 폴더(여기서 installation_folder MDT를 설치한 폴더)에 배치하여 UDI 마법사 디자이너 유효성 검사기 라이브러리에 DLL을 등록합니다.

사용자 지정 UDI 유효성 검사기를 만들려면

  1. BaseValidator 클래스의 하위 클래스를 만들고 다음 메서드를 구현하는 코드를 작성합니다.

    • Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties). 양식 컨트롤러는 Init 멤버를 호출하여 유효성 검사기를 초기화합니다. 이 메서드는 BaseValidator 클래스에 대한 Init 메서드를 호출해야 합니다. 일반적으로 UDI 마법사 구성 파일에서 유효성 검사기에 대해 설정된 모든 속성을 읽습니다. 예를 들어 InvalidCharactersValidator 유효성 검사기는 이 메서드를 사용하여 InvalidChars 속성의 값을 검색합니다.

    • IsValid. 폼 컨트롤러는 이 메서드를 호출하여 컨트롤에 유효한 텍스트가 포함되어 있는지 확인합니다. 다음은 필드가 비어 있지 않은지 확인하는 유효성 검사기에 대한 IsValid 메서드의 예입니다.

      BOOL IsValid(LPBSTR pMessage)  
      {  
          __super::IsValid(pMessage);  
      
          _bstr_t text;  
          m_pText->GetText(text.GetAddress());  
          return (text.length() > 0);  
      }  
      
    • Init(IControl *pControl, LPCTSTR 메시지). 양식 컨트롤러는 각 키 입력 및 기타 이벤트에 대해 이 멤버를 호출하여 유효성 검사기가 마법사 페이지 아래쪽에서 컨트롤의 내용과 업데이트된 메시지의 유효성을 검사하거나 지울 수 있도록 합니다.

      일반적으로 재정의해야 하는 유일한 메서드입니다. 그러나 유효성 검사기에 따라 만든 BaseValidator 클래스의 하위 클래스에서 다른 메서드를 재정의해야 할 수 있습니다. 이러한 다른 메서드에 대한 자세한 내용은 BaseValidator 클래스를 참조하세요.

  2. 사용자 지정 작업 클래스를 레지스트리 팩터리에 등록하는 코드를 작성합니다.

  3. 사용자 지정 작업에 대한 솔루션을 빌드합니다.

    참고

    만든 DLL 버전이 MDT 설치와 동일한 프로세서 플랫폼인지 확인합니다. 예를 들어 64비트 버전의 MDT를 설치하는 경우 사용자 지정 UDI 작업의 64비트 버전을 빌드합니다.

  4. 다음 발췌와 유사한 UDI 마법사 디자이너 구성 파일의 ValidatorLibrary 요소 아래에 Validator 요소를 만듭니다.

    <Validator   
    <Validator DLL="" Description="Must follow a pre-defined pattern" Type="Microsoft.Wizard.Validation.RegEx" Name="NamedPattern">  
       <Param Description="Enter the message you want displayed when the text in this field doesn't match the pattern:" Name="Message" DisplayName="Message"/>  
       <Param Description="The name of a pre-defined regular expression pattern. Must be Username, ComputerName, or Workgroup" Name="NamedPattern" DisplayName="Named Pattern"/>  
    </Validator>  
    

    경고

    모든 유효성 검사기 요소에는 Message 매개 변수가 포함되어야 합니다. 유효성 검사기에서 요구하는 대로 다른 모든 매개 변수를 지정합니다. 예를 들어 이전 발췌문에서 NamedPattern 매개 변수는 미리 정의된 정규식 패턴의 이름에 대한 매개 변수를 지정하는 데 사용됩니다.

  5. 이전 단계에서 만든 UDI 마법사 디자이너 구성 파일을 installation_folder\Bin\Config 폴더에 복사합니다(여기서 installation_folder MDT를 설치한 폴더임).

  6. 사용자 지정 작업의 DLL을 installation_folder\Templates\Distribution\Tools\ 플랫폼 폴더에 복사합니다(여기서 installation_folder MDT를 설치한 폴더이고 플랫폼 은 32비트 버전의 경우 x86 이거나 x64 는 64비트 버전용임).

UDI 마법사 참조

마법사 페이지 구성 요소

미리 빌드된 여러 구성 요소를 사용하여 사용자 지정 페이지를 빌드할 수 있습니다.

구성 요소 인스턴스 만들기

UDI 마법사는 클래스 팩터리를 사용하여 개체의 새 인스턴스를 만듭니다. 이러한 팩터리는 팩터리의 키로 문자열을 사용하여 팩터리 레지스트리에 등록됩니다. 예를 들어 WmiRepository 구성 요소는 "Microsoft 문자열로 식별됩니다. Wizard.WmiRepository,"는 IWmiRepository 헤더 파일에서 ID_WmiRepository 사용할 수 있습니다.

페이지를 WizardPageImpl의 하위 클래스로 작성한다고 가정하면 다음과 같이 WmiRepoistory 의 새 인스턴스를 만들 수 있습니다.

PWmiRepository pWmi;  
CreateInstance(Container(), ID_WmiRepository, &pWmi);  

CreateInstance 함수는 구성 요소의 새 인스턴스를 만들기 위한 형식 안전 템플릿 함수입니다. PWmiRepository 는 스마트 포인터이므로 참조 계산을 처리합니다.

Creatable 구성 요소

레지스트리에 등록할 수 있는 구성 요소 집합이 있습니다. 기본 UDI 마법사 실행 파일이 제공하므로 첫 번째 구성 요소 집합은 항상 등록됩니다. 다른 두 구성 요소 집합은 "선택적" DLL에 제공됩니다. 이러한 구성 요소를 사용할 수 있도록 하려면 DLL이 .config XML 파일의 DLL 섹션에 나열되어야 합니다. 코드는 특정 구성 요소가 포함된 실행 파일을 알 필요가 없습니다.

팩터리 레지스트리(OSDSetupWizard에 정의됨)에 등록된 구성 요소의 구성 요소 ID 목록(구성 요소 이름은 ID와 동일하지만 초기 ID_ 없음)은 표 3에 나와 있습니다.

표 3 구성 요소 ID

ID 설명
ID_ACPowerTask (ITask, IWizardComponent) 컴퓨터가 배터리로만 실행되지 않도록 하는 실행 전 작업
ID_AppDiscoveryTask (ITask, IWizardComponent) 컴퓨터에 설치한 소프트웨어 항목을 검색하기 위한 특수 작업
ID_BackgroundTask (IBackgroundTask, IWizardComponent) 다른 스레드에서 작업을 실행하는 데 사용할 수 있습니다.
ID_CopyFilesTask (ITask, IWizardComponent) 하나 이상의 파일을 복사하는 작업
ID_FormController (IFormController) 페이지가 자체 인스턴스를 수신하므로 인스턴스를 직접 만들 필요가 없습니다.
ID_InvalidCharactersValidator (IValidator) 유효성 검사기에 제공된 목록의 문자가 텍스트 필드에 포함되어 있지 않은지 확인합니다.
ID_Logger (ILogger) 페이지에서 공유 인스턴스에 대한 포인터를 수신하므로 인스턴스를 직접 만들 필요가 없습니다.
ID_NonEmptyValidator (IValidator) 필드가 비어 있지 않은지 확인하는 유효성 검사기
ID_PasswordValidator (IValidator) 두 텍스트 필드가 동일한 콘텐츠를 갖지 않도록 하는 유효성 검사기
ID_Regex (IRegEx) 정규식을 평가하고 일치 항목을 찾습니다.
ID_RegExValidator (IValidator) 정규식 또는 알려진 패턴에 대해 유효성을 검사하는 유효성 검사기
ID_SimpleStringProperties (IStringProperties, ISimpleStringProperties) XML을 사용하지 않고 작업에 속성을 보내는 간단한 방법을 제공합니다.
ID_ShellExecuteTask (ITask, IWizardComponent) 외부 프로그램 실행
ID_SummaryBag (ISummaryBag) Form 메서드를 통해 페이지에서 간접적으로 사용 가능
ID_TaskManager (ITaskManager, IBackgroundCallback, IWizardComponent) 작업 집합 및 UI 실행을 관리합니다.
ID_WmiRepository (IWmiRepository, IWizardComponent) WMI(Windows Management Instrumentation) 쿼리를 실행할 수 있습니다.
ID_IXmlDocument (IXmlDocument) XML 문서 읽기 및 쓰기를 위한 외관 제공

정의된 OSDRefreshWizard.dll, 공유 페이지 및 기타 컨트롤 구성 요소는 표 4 및 표 5에 표시됩니다.

표 4 디렉터리 컨트롤

ID 설명
ID_Directory (IDirectory) 파일 시스템에서 디렉터리 정보를 가져오기 위한 외관

표 5. 정의된 SharedPages.dll

ID 설명
ID_ADHelper (IADHelper) AD DS(Active Directory® Domain Services)의 제한된 기능 집합에 대한 외관을 제공합니다.
ID_CpuInfo (ICpuInfo) CPU가 32비트인지 64비트인지 확인합니다.
ID_DomainJoinValidator (IDomainJoinValidator) 자격 증명 집합이 도메인에 가입할 수 있는지 여부를 확인하는 몇 가지 방법이 있습니다.
ID_DriveList (IDriveList, IBindableList, IWizardComponent) WMI를 사용하여 컴퓨터에서 드라이브 목록 가져오기
ID_WiredNetworkTask (ITask) 무선 대신 하드 유선 네트워크 어댑터를 사용하여 네트워크에 연결되어 있는지 여부를 확인하는 작업

컨트롤 구성 요소

표 6에 나열된 구성 요소 유형 중 하나에 대한 액세스를 제공하는 GetControlWrapper 템플릿 함수를 통해 페이지의 컨트롤과 상호 작용합니다.

표 6 구성 요소

대화 상자 컨트롤 형식 설명
CONTROL_CHECK_BOX (ICheckBox) 확인란 컨트롤을 사용하기 위한 외관
CONTROL_COMBO_BOX (IComboBox) 콤보 상자 컨트롤의 외관
CONTROL_GENERIC (IControl) 대부분의 컨트롤 형식으로 작업하여 사용 및 표시 상태를 제어할 수 있습니다.
CONTROL_LIST_VIEW (IListView) 목록 보기 컨트롤의 기능에 대한 액세스를 제공하는 외관
CONTROL_PROGRESS_BAR (IProgressBar) 진행률 표시줄 컨트롤의 위치로 작업하기 위한 외관
CONTROL_RADIO_BUTTON (IRadioButton) 라디오 단추 컨트롤을 사용하기 위한 외관
CONTROL_STATIC_TEXT (IStaticText) 레이블 또는 텍스트 상자와 같은 컨트롤의 텍스트에 대한 읽기/쓰기 권한을 제공하는 외관
CONTROL_TREE_VIEW (ItreeView) 트리 뷰 컨트롤을 사용하기 위한 외관

이미지 목록 구성 요소

이 구성 요소는 페이지의 ImageList 컨트롤에 대한 외관입니다. IListView 또는 ITreeView 인터페이스를 통해 이미지 목록을 만듭니다.

FormController 구성 요소

마법사는 이 구성 요소를 만들어 페이지에 전달합니다. WizardPageImpl 기본 클래스가 구현하는 Form 메서드를 사용하여 페이지에서 액세스합니다.

InvalidCharacterValidator 구성 요소

페이지에 포함할 수 있는 유효성 검사기의 유형입니다. ID는 "Microsoft 텍스트 값이 있는 ID_InvalidCharactersValidator(IValidator.h에 정의됨)입니다. Wizard.Validation.InvalidChars."

이 유효성 검사기는 허용되지 않는 문자 목록인 InvalidChars라는 단일 속성(.config 파일의 Setter 요소)을 찾습니다. 텍스트 상자의 문자를 확인합니다. 텍스트에 이 목록의 문자가 포함되어 있으면 구성 요소는 실패를 보고합니다.

NonEmptyValidator 구성 요소

페이지에 포함할 수 있는 유효성 검사기의 유형입니다. ID는 텍스트 값이 "Microsoft 있는 ID_NonEmptyValidator(IValidator.h에 정의됨)입니다. Wizard.Validation.NonEmpty."

이 유효성 검사기는 텍스트 상자(또는 IStaticText를 지원하는 다른 컨트롤)에 빈 문자열 값이 있는 경우 오류를 보고합니다.

PasswordValidator 구성 요소

페이지에 포함할 수 있는 유효성 검사기의 유형입니다. ID는 "Microsoft 텍스트 값이 있는 ID_PasswordValidator(IValidator.h에 정의됨)입니다. Wizard.Validation.Password."

이 유효성 검사기는 두 개의 서로 다른 텍스트 컨트롤( IStaticText를 지원하는 컨트롤)과 동일한 값이 포함되지 않은 경우 오류를 보고합니다. 즉, 암호암호 확인 텍스트 상자가 일치하지 않으면 실패합니다.

이 유효성 검사기에는 두 개의 컨트롤이 필요하므로 다른 유효성 검사기보다 더 많은 설정이 필요합니다. 설정은 다음과 같을 수 있습니다.

Form()->AddToGroup(IDC_EDIT_PASSWORD, IDC_EDIT_PASSWORD2);  
PValidator pValidator;  
Form()->AddValidator(IDC_EDIT_PASSWORD, ID_PasswordValidator, pMessage, &pValidator);  
PStaticText pPassword2;  
GetControlWrapper(View(), IDC_EDIT_PASSWORD2, CONTROL_STATIC_TEXT, &pPassword2);  
pValidator->SetProperty(0, pPassword2);  

먼저 암호 확인 컨트롤을 암호 컨트롤의 "자식"으로 정의합니다. 이렇게 하면 양식 컨트롤러가 암호 컨트롤을 사용하지 않도록 설정하면 암호 확인 컨트롤도 비활성화됩니다. 다음으로, 양식에 암호 유효성 검사기를 추가합니다. 마지막으로 암호 확인 컨트롤에 대한 인터페이스를 암호 유효성 검사기에 제공합니다.

두 컨트롤에 대한 요구 사항 때문에 코드를 사용하여 .config XML 파일이 아닌 이 유효성 검사기를 설정해야 합니다.

RegExValidator 구성 요소

페이지에 포함할 수 있는 유효성 검사기의 유형입니다. ID는 "Microsoft 텍스트 값이 있는 ID_RegExValidator(IValidator.h에 정의됨)입니다. Wizard.Validation.RegEx."

이 유효성 검사기는 텍스트 컨트롤의 내용( IStaticText를 지원하는 컨트롤)을 정규식과 비교하고 텍스트가 정규식과 일치하지 않으면 실패합니다.

또는 미리 정의된 명명된 패턴으로 이 유효성 검사기를 사용할 수 있습니다. 정규식을 사용하려면 XML에 Pattern이라는 setter 속성이 포함되어야 합니다. 명명된 패턴을 대신 사용하려면 Table 7의 값 중 하나로 설정된 NamedPattern 이라는 setter를 사용합니다.

표 7 명명된 패턴 Setter

패턴 설명
사용자 이름 텍스트가 domain\user 또는 user@domain 형식인지 확인합니다.
Computername 이름은 1~15자 사이여야 하며 문자 집합(예: 및 ?)을 포함할 수 없습니다.
Workgroup 이름은 1~15자 사이여야 하며 문자 집합(예: =, +, ?)을 포함할 수 없습니다.

FactoryRegistry 구성 요소

이 구성 요소는 모든 클래스 팩터리 및 서비스를 추적합니다. IFactoryRegistry 인터페이스를 구현하며 페이지의 Container 메서드를 통해 간접적으로 사용할 수 있습니다. 또한 레지스트리는 확장 DLL을 로드합니다. DLL을 로드한 후 레지스트리는 RegisterFactories라는 내보낸 함수를 찾습니다. 이 함수를 구현해야 하며 이 함수에서 페이지, 작업 및 유효성 검사기(및 등록하려는 다른 클래스 팩터리)에 대한 클래스 팩터리를 등록해야 합니다. 다음은 샘플 프로젝트의 예입니다.

extern "C" __declspec(dllexport) void RegisterFactories(IFactoryRegistry *factories)  
{  
Register<LocationPageFactory>(ID_LocationPage, factories);  
}  

로거 구성 요소

이 구성 요소는 Logger 메서드( WizardPageImpl에 의해 구현됨)를 통해 페이지에서 사용할 수 있습니다. 이 메서드를 사용하여 로그 파일에 항목을 씁니다. 로그 파일의 내용은 사용자가 UDI 마법사를 실행했을 수 있는 문제를 진단하는 데 유용합니다.

PropertyBag 구성 요소

속성 모음은 메모리 변수용 컨테이너입니다. Container()->Properties()를 사용하여 페이지에서 사용할 수 있습니다. 메모리 변수는 다른 페이지 간에 임시 데이터를 전달하는 데 유용합니다.

TSVariableBag 및 TSRepository 구성 요소

TSVariableBag 구성 요소를 사용하면 작업 순서 변수를 읽고 쓸 수 있습니다. 사용자가 마침 (기본적으로)을 클릭할 때까지 메모리에 값을 유지합니다. 페이지의 TSVariables 메서드(WizardPageImpl 기본 클래스에 의해 구현됨)를 통해 TSVariable 모음에 액세스할 수 있습니다. 이러한 구성 요소는 작업 순서 변수의 모든 읽기 및 쓰기를 기록합니다.

WmiRepository 구성 요소

이 구성 요소는 WMI 쿼리 작업을 위한 외관을 제공합니다. ID_WmiRepositoryCreateInstance 도우미 함수를 호출하여 IWmiRepository 인터페이스를 지원하는 이 구성 요소의 인스턴스를 가져올 수 있습니다. 이 구성 요소는 IWmiIterator 인터페이스를 통해 결과 레코드를 반환합니다.

마법사 페이지 도우미 클래스

UDI SDK와 함께 제공되는 기본 제공 도우미 클래스를 사용하여 사용자 지정 UDI 마법사 페이지를 만들 수 있습니다. 표 8에는 사용자 지정 마법사 페이지를 만드는 데 사용할 수 있는 도우미 클래스가 나열되어 있습니다.

표 8 도우미 클래스

도우미 클래스 설명
ClassFactoryImpl 클래스 이는 팩터리 레지스트리에 등록할 수 있는 클래스 팩터리를 만드는 데 유용한 기본 클래스입니다.
인터페이스 템플릿 클래스 둘 이상의 인터페이스를 구현하는 구성 요소를 빌드하려는 경우 이 템플릿 클래스를 사용합니다.
경로 도우미 클래스 이 클래스는 일반적인 파일/디렉터리 작업을 제공합니다.
포인터 템플릿 클래스 이 클래스는 COM 구성 요소의 수명 관리에 대한 참조 계산을 제공합니다. 인터페이스를 완료하면 인터페이스를 해제하는 것이 중요합니다. 이 템플릿 클래스는 수명을 자동으로 처리합니다.
PUnknown 클래스 이 클래스는 IUnknown 인터페이스에 대한 스마트 포인터입니다. 다른 모든 인터페이스의 경우 Pointer 템플릿 클래스를 사용합니다.
StringUtil 도우미 클래스 이 클래스는 문자열을 더 쉽게 작업할 수 있는 도우미 메서드를 제공합니다.
SubInterface 템플릿 클래스 이 기본 클래스를 사용하면 다른 인터페이스에서 상속되는 인터페이스를 지원하는 구성 요소를 더 쉽게 구현할 수 있습니다.
UnknownImpl 템플릿 클래스 이 클래스는 COM 구성 요소를 만드는 대부분의 세부 정보를 처리합니다.
WizardComponent 템플릿 클래스 이 기본 클래스는 구성 요소 만들기 및 로깅과 같은 마법사 서비스에 액세스해야 하는 구성 요소를 만드는 데 사용됩니다.
WizardPageImpl 템플릿 클래스 이 기본 클래스는 모든 사용자 지정 마법사 페이지의 기본 클래스로 사용해야 합니다.

ClassFactoryImpl 클래스

이는 팩터리 레지스트리에 등록할 수 있는 클래스 팩터리를 만드는 데 유용한 기본 클래스입니다.

다음은 ClassFactoryImpl 클래스를 정의하기 위한 샘플 프로젝트의 LocationPage.h 파일에서 발췌한 내용입니다.

#pragma once  

#include "ClassFactoryImpl.h"  

class LocationPageFactory :public ClassFactoryImpl  
{  
protected:  
    IUnknown *CreateNewInstance();  
};  

다음은 페이지의 클래스 팩터리를 정의하는 데 사용되는 샘플 마법사 페이지의 LocationPage.cpp 파일에서 발췌한 것입니다.

IUnknown *LocationPageFactory::CreateNewInstance()  
{  
    return static_cast<IWizardPage *>(new LocationPage);  
}  

인터페이스 템플릿 클래스

둘 이상의 인터페이스를 구현하는 구성 요소를 빌드하려는 경우 이 템플릿 클래스를 사용합니다. 예를 들면 다음과 같습니다.

classLocationPage :public Interface<IFieldCallback, WizardPageImpl<IDD_LOCATION_PAGE>>  

이 코드는 IFieldCalbackWizardPageImpl 이 지원하는 인터페이스( IWizardPage)를 모두 지원하는 기본 클래스 체인을 만듭니다.

경로 도우미 클래스

이 클래스는 일반적인 파일/디렉터리 작업을 제공합니다.

static inline std::wstring GetModulePath(HINSTANCE hModule)  

또한 이 메서드에 제공하는 인스턴스 핸들을 사용하여 .exe 또는 .dll 파일의 전체 경로를 반환합니다.

static inline std::wstring GetModuleFilename(HINSTANCE hModule)  

클래스는 이 메서드에 제공하는 인스턴스 핸들을 사용하여 .exe 및 .dll 파일의 전체 경로 및 파일 이름을 반환합니다.

static inline std::wstring GetDirectoryName(LPCWSTR fullName)  

. . . 또는 파일 이름을 제거하는 동안 경로만:

static inline std::wstring GetFileName(LPCWSTR fullName)  

파일 이름이 있는 경로가 지정된 경우 경로 도우미 클래스는 파일 이름만 반환합니다.

static inline std::wstring Combine(LPCWSTR path, LPCWSTR name)  

마지막으로 클래스는 결합된 경로 및 파일 이름(또는 다른 경로)인 새 문자열을 반환합니다.

포인터 템플릿 클래스

이 클래스는 Pointer.h에 정의되어 있습니다. COM 구성 요소는 수명 관리에 참조 계산을 사용하므로 인터페이스를 완료할 때 항상 릴리스하는 것이 중요합니다. Microsoft 수명을 자동으로 처리하는 템플릿 클래스를 제공합니다. 예를 들어 XML 인터페이스에 대한 스마트 포인터를 원하는 경우 다음과 같이 작성할 수 있습니다.

Pointer<IXMLDOMNode> pNewChild  
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);  

첫 번째 줄은 스마트 포인터를 정의합니다. 두 번째 줄은 다른 호출을 통해 스마트 포인터를 검색하는 것을 보여줍니다. & 연산자는 기존 인터페이스가 포함된 경우 항상 기존 인터페이스를 해제하고 내부 포인터의 주소를 반환합니다. 이와 같은 포인터를 검색한 후에는 변수가 범위를 벗어나면 포인터 인스턴스가 Release 를 호출합니다. Microsoft AddRefRelease를 수동으로 호출하는 대신 스마트 포인터를 사용하는 것이 좋습니다.

또한 Pointer 스마트 포인터 클래스는 QueryInterface 를 호출하여 다른 인터페이스를 검색합니다. 예를 들어 팩터리 레지스트리가 구성 요소의 새 인스턴스를 만들 때 다음과 같은 코드가 있습니다.

PWizardComponent pComp = pUnknown;  
if (pComp != nullptr)  
    pComp->SetContainer(m_pContainer);  

첫 번째 줄은 백그라운드에서 QueryInterface 를 호출하여 IWizardComponent 인터페이스를 요청합니다. 구성 요소가 해당 인터페이스를 지원하지 않는 경우 결과 스마트 포인터는 nullptr 과 같습니다.

PUnknown 클래스

이 클래스는 IUnknown 인터페이스에 대한 스마트 포인터입니다. 다른 모든 인터페이스의 경우 Pointer 템플릿 클래스를 사용합니다.

StringUtil 도우미 클래스

이 클래스는 Utilities.h에 정의되어 있으며 문자열 작업을 더 쉽게 수행할 수 있는 도우미 메서드를 제공합니다.

static inline int CompareIgnore(LPCWSTR first, LPCWSTR second)  

이 메서드는 대/소문자를 무시하면서 두 문자열을 비교합니다(표 9 참조).

표 9 StringUtil 도우미 클래스

반환 설명
0 문자열 일치, 대/소문자 무시
<0 첫 번째 < 초
>0 첫 번째 > 초

예를 들면 다음과 같습니다.

static inline std::wstring Format(LPCWSTR input, int index, LPCWSTR value)  
static inline std::wstring Format(LPCWSTR input, int index, DWORD value)  

이러한 메서드는 매개 변수가 형식이라는 점에서 Microsoft .NET Format 메서드와 {0}비슷합니다. 그러나 입력의 형식 지정은 수행하지 않습니다. 대체만 수행합니다.

static inline std::wstring Printf(std::wstring format, I val)  
static inline std::wstring Printf(std::wstring format, I val1, J val2)  
static inline std::wstring Printf(std::wstring format, I val1, J val2, K val3)  
static inline std::wstring Printf(std::wstring format, I val1, J val2, K val3, L val4)  

문자열 또는 버퍼에 대한 메모리를 직접 할당할 필요가 없도록 wstring을 반환하는StringCchPrintf 주변의 래퍼입니다.

SubInterface 템플릿 클래스

이 기본 클래스를 사용하면 다른 인터페이스에서 상속되는 인터페이스를 지원하는 구성 요소를 더 쉽게 구현할 수 있습니다. 예를 들어 ICheckBox 인터페이스는 IControl에서 상속됩니다. 이 클래스를 사용하여 CheckBoxWrapper를 정의하는 방법은 다음과 같습니다.

classCheckBoxWrapper :public SubInterface<IControl, UnknownImpl<ICheckBox> >  

기본 인터페이스는 첫 번째 매개 변수이고 파생된 인터페이스는 두 번째 매개 변수입니다.

UnknownImpl 템플릿 클래스

이 클래스는 UnknownImpl.h에 정의되며 COM 구성 요소를 만드는 대부분의 세부 정보를 처리합니다. 다음은 이 기본 클래스를 사용하는 방법의 예입니다.

classDirectory :public UnknownImpl<IDirectory>  

이 코드는 IDirectory 인터페이스를 지원하는 클래스를 정의합니다.

WizardComponent 템플릿 클래스

이 클래스는 IWizardComponent.h에 정의되며 구성 요소 만들기 및 로깅과 같은 마법사 서비스에 액세스해야 하는 구성 요소를 만드는 데 유용한 기본 클래스입니다.

예를 들어 CopyFilesTask 구성 요소를 정의하는 방법은 다음과 같습니다.

classCopyFilesTask :public WizardComponent<ITask>  
{  
    ...  

이 템플릿 클래스의 매개 변수는 구성 요소에 사용하려는 "main" 인터페이스이며, 작업의 경우 ITask입니다. WizardComponent를 사용하면 구성 요소가 제공하는 인터페이스(이 예제의 ITask)와 IWizardComponent를 모두 지원합니다.

클래스 팩터리 레지스트리를 사용하여 새 구성 요소를 만들 때마다 레지스트리는 구성 요소의 IWizardComponent-SetContainer> 메서드를 호출하여 마법사 서비스에 대한 구성 요소 액세스를 제공합니다.

WizardPageImpl 템플릿 클래스

사용자 지정 페이지의 기본 클래스로 이 클래스를 사용합니다. 예를 들면 다음과 같습니다.

class LocationPage :public WizardPageImpl<IDD_LOCATION_PAGE>  

매개 변수는 대화 상자 템플릿의 리소스 ID입니다.

마법사 페이지 인터페이스

UDI 마법사는 인터페이스를 사용하여 페이지의 다양한 컨트롤에 액세스합니다. 사용자 페이지 내에서 GetControlWrapper 함수를 사용하여 컨트롤 래퍼를 검색합니다. 예를 들면 다음과 같습니다.

PStaticText pFormat;  
GetControlWrapper(View(), IDC_CHECK_PARTITION, CONTROL_STATIC_TEXT, &pFormat);  

여기서 PStaticTextIStaticText 인터페이스에 대한 스마트 포인터입니다. 스마트 포인터는 범위를 벗어나거나 변수의 주소(예: &pFormat)를 메서드에 전달할 때 자동으로 COM Release() 메서드를 호출합니다.

IADHelper 인터페이스

__interfaceIADHelper : IUnknown  
{  
    HRESULT Init(ILogger *pLogger);  
    HRESULT ValidLogon(LPCTSTR userName, LPCTSTR password, LPCTSTR domain);  
    HRESULT HasAccess(LPCTSTR username, LPCTSTR password, LPCTSTR domain, LPCTSTR computerName, LPCTSTR accountDomain);  
};  

HRESULT Init(ILogger *pLogger)

정보를 기록할 수 있도록 로거에 전달하여 이 구성 요소를 초기화합니다.

HRESULTValidLogon(LPCTSTR userName, LPCTSTR 암호, LPCTSTR 도메인)

이 메서드는 표 10과 같이 자격 증명 집합이 유효한지 확인합니다.

표 10. HResultValidLogon

Hresult 설명
S_ok 자격 증명이 유효합니다.
S_false 자격 증명이 잘못되었습니다.
E_fail 도메인 컨트롤러를 찾을 수 없습니다. 자세한 내용은 로그 확인
HRESULT HasAccess(LPCTSTR 사용자 이름, LPCTSTR 암호, LPCTSTR 도메인, LPCTSTR computerName, LPCTSTR accountDomain)

이 메서드는 표 11에 표시된 것처럼 자격 증명 집합이 AD DS의 컴퓨터 개체에 대한 읽기/쓰기 액세스 권한이 있는지 여부를 확인합니다.

표 11. HResult HasAccess

Hresult 설명
S_ok 사용자에게 액세스 권한이 있습니다.
E_fail 사용자에게 액세스 권한이 없습니다. 추가 정보는 로그 파일을 확인합니다.

IBackgroundTask 인터페이스

__interface IBackgroundTask : IUnknown  
{  
    HRESULT Init(ITask *pTask, int id, IBackgroundCallback *pCallback);  
    void Start(void);  
    BOOL Running(void);  
    HRESULT Wait(DWORD waitMilliseconds);  
    HRESULT Terminate(DWORD exitCode);  
    HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult);  
    HRESULT Close(void);  
};  
개요

진행률 페이지에서는 이 클래스를 사용하여 별도의 스레드에서 작업을 실행합니다. 별도의 스레드에서 작업을 수행하려는 경우 이 클래스를 사용할 수도 있습니다. 작업은ITask 인터페이스를 지원하는 모든 클래스입니다.

이 인터페이스는 ID_BackgroundTask("Microsoft 의해 구현됩니다. IBackgroundTask.h 인터페이스에 정의된 Wizard.BackgroundTask") 구성 요소입니다.

HRESULT Init(ITask *pTask, int id, IBackgroundCallback *pCallback)

이 인터페이스는 표 12와 같이 구성 요소를 초기화합니다.

표 12. HRESULT Init

매개 변수 설명
pTask 다른 스레드에서 실행하려는 코드가 포함된 클래스에 대한 포인터
Id 콜백의 Finished 메서드에서 를 사용하여 실행이 완료된 작업을 알 수 있는 숫자입니다. 동일한 콜백 메서드를 사용하여 여러 작업을 시작하는 경우 유용합니다.
pCallback 태스크 실행이 완료 될 때마다 호출 되는 Finished 메서드를 구현 하는 클래스입니다. Finished 메서드에 대한 호출은 UI 스레드가 아닌 백그라운드 스레드에 있습니다.
void Start(void)

이 메서드는 백그라운드 스레드에서 작업을 시작하고 표 13에 표시된 요소를 반환합니다.

표 13. 백그라운드 스레드 반환

반환 설명
E_INVALIDARG 작업이 이미 실행 중이므로 지금 시작할 수 없습니다.
E_fail 스레드를 시작하는 데 문제가 있었습니다.
S_ok 스레드가 시작되었습니다.
BOOL Running()

이 메서드는 백그라운드 작업이 현재 실행 중인 경우 TRUE를 반환하고 실행되지 않는 경우 FALSE를 반환합니다.

HRESULT Wait(DWORD waitMilliseconds)

이 메서드는 스레드 실행이 중지되거나 밀리초가 경과할 때까지 대기합니다.

HRESULT Terminate(DWORD exitCode)

이 메서드는 실행 중인 스레드를 종료합니다(표 14 및 표 15 참조). 이 프로세스는 이 메서드가 반환된 후 완료하는 데 짧은 시간이 걸릴 수 있습니다.

표 14. HRESULT 종료 종료 코드

매개 변수 설명
Exitcode GetExitCode 메서드에서도 사용할 수 있는 Finished 콜백 메서드로 전송될 종료 코드입니다.

표 15. 종료 코드

반환 설명
E_fail 종료 호출이 실패했습니다.
S_ok 스레드를 종료하는 요청이 성공했습니다.
HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult)

이 메서드를 사용하여 백그라운드 스레드에서 작업을 실행한 결과를 가져옵니다(표 16 참조).

표 16. 결과 코드

매개 변수 설명
pCode 반환 시 설정될 DWORD 에 대한 포인터이거나 반환 값이 필요하지 않은 경우 nullptr 입니다. 종료 시 이 매개 변수는 스레드가 실행 중인 경우 , 작업의 Execute 메서드에서 반환된 코드 또는 해당 메서드를 호출한 경우 Terminate 메서드에 전달된 값이 STILL_ACTIVE 로 설정됩니다.
pHresult 반환 시 설정될 HRESULT에 대한 포인터이거나 HRESULT 값이 필요하지 않은 경우 nullptr입니다.
HRESULT Close(void)

이 메서드는 백그라운드 스레드를 해제합니다. 스레드가 현재 실행 중이고 그렇지 않으면 S_OK 경우 E_INVALIDARG 반환합니다.

ICheckBox 인터페이스

__interface ICheckBox : IControl  
{  
    void Check(BOOL check);  
    BOOL IsButtonChecked();  
};  
void Check(BOOL 검사)

확인란의 선택된 상태를 설정합니다. 메서드가 TRUE이면 확인란이 선택됩니다. 메서드가 FALSE이면 확인란의 선택을 취소합니다.

BOOL IsButtonChecked()

이 메서드는 확인란의 현재 확인란 상태를 보고합니다.

IComboBox 인터페이스

__interface IComboBox : IControl  
{  
    HRESULT Bind([in] IBindableList *pList);  
    HRESULT Select(int index);  
    int Selected(void);  
    void Add([in] LPCTSTR caption);  
    HRESULT GetText([out, retval] LPBSTR pText);  
    void Clear();  
};  
개요

이 인터페이스는 CheckBoxWrapper 구성 요소에 의해 구현됩니다. 형식이 CONTROL_COMBO_BOXGetControlWrapper 도우미 함수를 사용하여 이 구성 요소의 인스턴스를 검색합니다.

HRESULT Bind([in] IBindableList *pList)

IBindableList 인터페이스를 구현하는 데이터 원본이 있는 경우 이 메서드를 사용합니다. 목록 상자는 이 목록의 캡션을 사용하여 콘텐츠를 초기화합니다.

HRESULT Select(int index)

인덱스에서 콤보 상자에서 항목을 선택합니다.

int Selected(void)

이 메서드는 선택한 항목의 인덱스 또는 아무것도 선택하지 않은 경우 -1 을 반환합니다.

void Add([in] LPCTSTR 캡션)

콤보 상자에 항목을 수동으로 추가합니다.

HRESULT GetText([out, retval] LPBSTR pText)

콤보 상자에서 현재 선택한 항목의 문자열을 검색합니다.

void Clear()

콤보 상자에서 모든 항목을 제거합니다.

IControl 인터페이스

__interface IControl : IUnknown  
{  
    HRESULT SetEnable(BOOL enable);  
    BOOL IsEnabled(void);  
    HRESULT SetVisible(BOOL visible);  
};  
개요

이 인터페이스는 ControlWrapper 구성 요소에 의해 구현됩니다. 형식이 CONTROL_GENERICGetControlWrapper 도우미 함수를 사용하여 이 구성 요소의 인스턴스를 검색합니다.

HRESULT SetEnable(BOOL 사용)

컨트롤을 사용하거나 사용하지 않도록 설정합니다.

BOOL IsEnabled(void)

컨트롤을 사용하도록 설정하면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

HRESULT SetVisible(BOOL 표시)

컨트롤을 표시하거나 숨깁니다.

ICpuInfo 인터페이스

__interface ICpuInfo : IUnknown  
{  
    BOOL Is64Bit(void);  
};  
개요

ID_CpuInfo 구성 요소를 만들어 이 인터페이스를 가져옵니다. 단일 메서드는 CPU가 32비트인지 64비트인지 보고합니다. 64비트 컴퓨터에 32비트 운영 체제가 있는 경우 이 메서드는 CPU의 너비만 보고하므로(운영 체제가 아님) TRUE를 반환합니다.

IDirectory 인터페이스
__interface IDirectory : IUnknown  
{  
    BOOL FileExists(LPCWSTR name);  
    BOOL FindFirst([in] LPCWSTR name);  
    HRESULT FoundName([out, retval] LPBSTR name);  
    DWORD FoundAttributes(void);  
    BOOL FindNext(void);  
    void FinishFind(void);  
};  
개요

ID_Directory 사용하여 만드는 디렉터리 구성 요소는 파일 시스템의 디렉터리 작업을 위한 외관을 제공합니다.

BOOL FileExists(LPCWSTR name)

이 메서드는 사용자가 제공한 이름의 파일이 있는 경우 TRUE를 반환합니다.

BOOL FindFirst([in] LPCWSTR 이름)

이 메서드는 사용자가 제공한 이름에 대한 첫 번째 일치 항목을 찾습니다. 와일드카드 문자를 지원하고 파일 및 디렉터리 이름을 모두 반환합니다. 일치하는 항목이 발견되면 메서드가 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

HRESULT FoundName([out, retval] LPBSTR name)

이 메서드는 FindFirst 또는 FindNext를 호출하여 찾은 파일의 이름을 검색합니다.

DWORD FoundAttributes(void)

이 메서드는 가장 최근에 찾은 파일 또는 디렉터리에 대한 특성을 반환합니다. 다음과 같이 코드를 사용하여 디렉터리인지 여부를 테스트할 수 있습니다.

pDirectory->FoundAttributes() & FILE_ATTRIBUTE_DIRECTORY  
BOOL FindNext(void)

다음을 찾습니다. 이 메서드는 다른 일치 항목이 발견되면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

void FinishFind(void)

이 메서드는 찾기 작업에 사용되는 리소스를 해제합니다.

IDomainJoinValidator 인터페이스

__interface IDomainJoinValidator : IUnknown  
{  
    HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName);  
    HRESULT IsUsernameValid(LPCWSTR domainName);  
    BOOL CanModifyComputerAdEntry(LPCWSTR domainName);  
};  
개요

CreateInstance 템플릿 함수에 대한 ID_DomainJoinValidator 값을 사용하여 이 인터페이스의 인스턴스를 가져옵니다.

HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName)

표 17에 표시된 대로 인스턴스를 초기화합니다.

표 17. HRESULT Init - 인스턴스 초기화

매개 변수 설명
pLogger 페이지의 로거 메서드를 통해 페이지에서 사용할 수 있는 로거 인스턴스
pContainer 페이지의 Container 메서드에서 결과를 전달합니다.
pUsername 유효성을 검사할 사용자 이름이 포함된 텍스트 상자
pPassword 유효성을 검사할 암호가 포함된 텍스트 상자
PComputerName 결국 도메인에 가입될 컴퓨터의 이름이 들어 있는 텍스트 상자
HRESULT IsUsernameValid(LPCWSTR domainName)

이 메서드는 IADHelper-ValidLogon> 메서드를 사용하여 작업을 수행합니다. 자세한 내용은 해당 메서드를 참조하세요.

BOOL CanModifyComputerAdEntry(LPCWSTR domainName)

사용자에게 컴퓨터 항목을 수정할 수 있는 권한이 있는지 확인합니다. 대부분의 작업은 IADHelper-HasAccess>에서 수행됩니다. 이 메서드가 FALSE를 반환하는 경우 로그 파일에서 자세한 내용을 확인합니다.

IDriveList 인터페이스

__interface IDriveList : IUnknown  
{  
    HRESULT Init(IWmiRepository *pWmi);  
    HRESULT SetWhereClause(LPCTSTR whereClause);  
    HRESULT SetMinimumDriveSize(__int64 size);  
    HRESULT Update(void);  
    HRESULT AddProperty(ENUM_DISK_QUERY_SECTION section, LPCTSTR propName, LPCTSTR propNameReturned);  

    size_t Count(void);  
    HRESULT GetProperty(size_t index, LPCTSTR propName,  LPVARIANT value);  
    HRESULT GetCaption(size_t index,  LPBSTR pCaption);  
}  
HRESULT Init(IWmiRepository *pWmi)

다른 구성 요소를 호출하기 전에 이 메서드를 호출합니다. 이 메서드를 호출하기 전에 새 WmiRepository 를 만들어야 합니다.

HRESULT SetWhereClause(LPCTSTR whereClause)

이 메서드를 사용하면 쿼리에서 "where" 절로 표시되는 텍스트를 추가할 수 있습니다. 예를 들어 다음 줄은 USB 드라이브만 반환합니다.

pDrives->SetWhereClause(L"WHERE InterfaceType='USB'");  
HRESULT SetMinimumDriveSize(__int64 크기)

쿼리에서 반환될 드라이브의 드라이브 크기 최소화를 바이트 단위로 설정합니다.

HRESULT 업데이트(void)

쿼리를 실행합니다. 이 메서드를 호출한 후 사용할 수 있는 드라이브 목록은 드라이브 문자별로 정렬됩니다.

HRESULT AddProperty(ENUM_DISK_QUERY_SECTION 섹션, LPCTSTR propName, LPCTSTR propNameReturned)

이 메서드는 쿼리 결과에서 사용할 수 있도록 하려는 추가 속성의 이름을 추가합니다. Update를 호출하기 전에 이 메서드를 호출 합니다. 표 18에는 세 가지 유용한 속성이 표시됩니다.

표 18. HRESULT AddProperty: 유용한 속성

섹션 속성 설명
DISKQUERY_LOGICALDISK 크기 문자열로 표시되는 크기(바이트)입니다.
DISKQUERY_DISKPARTITION DiskIndex 0부터 정수인 디스크 번호
DISKQUERY_LOGICALDISK VolumeName 볼륨 레이블
size_t Count(void)

쿼리가 반환하는 레코드 수입니다. 이 메서드를 호출하기 전에 Update 를 호출합니다.

HRESULT GetProperty(size_t 인덱스, LPCTSTR propName, LPVARIANT 값)

이 메서드는 테이블 19에 표시된 대로 쿼리 결과에서 속성 값을 검색합니다.

표 19. HRESULT GetProperty

매개 변수 설명
색인 결과 레코드에 대한 인덱스(0부터 시작)
propName 속성의 이름(예: "Size")
반환 시 이 매개 변수에는 속성의 변형 값이 포함됩니다.
HRESULT GetCaption(size_t 인덱스, LPBSTR pCaption)

이 메서드는 Caption 속성과 동일한 레코드의 캡션을 검색합니다.

IImageList 인터페이스

__interface IImageList  
{  
    HRESULT CreateImageList(int width, int height, UINT flags);  
    HImageList GetImageList(void);  
    int AddImage(HInstance hInstance, int resourceId);  
};  
개요

이 인터페이스는 ImageList 구성 요소에 의해 구현됩니다. IListView 인터페이스에서 이 구성 요소의 인스턴스를 검색합니다.

HRESULT CreateImageList(int width, int height, UINT flags)

이 구성 요소가 관리하는 새 이미지 목록을 만듭니다. 이 메서드를 한 번만 호출합니다.

HImageList GetImageList(void)

이 메서드는 이미지 목록에서 다른 작업을 수행해야 하는 경우 이미지 목록의 핸들을 반환합니다.

int AddImage(HInstance hInstance, int resourceId)

표 20에 표시된 것처럼 리소스의 이미지 목록에 새 이미지를 추가합니다.

표 20. HRESULT IImageList 인터페이스

매개 변수 설명
hInstance 비트맵 리소스를 포함하는 모듈의 인스턴스 핸들
Resourceid 이미지 목록에 로드할 리소스의 ID

IListView 인터페이스

__interface IListView : IControl  
{  
    int AddItem([in] LPCTSTR text);  
    int AddColumn(int width, [in] LPCTSTR text);  
    HRESULT SetSubItem(int index, int column, [in] LPCTSTR text);  
    int GetWidth(void);  
    void SetExtendedStyle(DWORD style);  
    int GetSelectedItem(void);  
    HRESULT SelectItem(int index);  
    BOOL IsItemChecked(int index);  
    int GetItemCount(void);  
    HRESULT CreateImageList(int width, int height, UINT flags);  
    int AddImage(HINSTANCE hInstance, int resourceId);  
    HRESULT SetImage(int index, int imageIndex);  
    HRESULT Clear(void);  
};  
개요

이 인터페이스는 ControlWrapper 구성 요소에 의해 구현됩니다. 형식이 CONTROL_LIST_VIEWGetControlWrapper 도우미 함수를 사용하여 이 구성 요소의 인스턴스를 검색합니다.

int AddItem([in] LPCTSTR 텍스트)

목록 상자에 새 행을 추가합니다. 메서드는 방금 추가한 항목의 인덱스 를 반환합니다.

int AddColumn(int width, [in] LPCTSTR 텍스트)

목록 보기에 새 열을 추가합니다.

HRESULT SetSubItem(int index, int column, [in] LPCTSTR text)

표 21에 표시된 것처럼 목록 상자의 첫 번째 열이 아닌 열의 텍스트를 설정합니다.

표 21. HRESULT SetSubItem

매개 변수 설명
인덱스 수정하려는 목록 항목의 인덱스
업데이트하려는 열의 인덱스입니다. 첫 번째 열은 AddItem으로 설정되고, 열 2와 다음이 이 메서드로 설정됩니다.
텍스트 열에 표시할 문자열
int GetWidth(void)

이 메서드는 전체 텍스트 상자의 너비를 반환합니다.

void SetExtendedStyle(DWORD 스타일)

이 메서드를 사용하면 목록 상자에서 확장 스타일을 설정할 수 있습니다. 예를 들면 다음과 같습니다.

m_pList->SetExtendedStyle(LVS_EX_FULLROWSELECT);  
int GetSelectedItem(void)

이 메서드는 현재 선택된 목록 보기 항목의 인덱스 를 반환합니다.

HRESULT SelectItem(int index)

목록에서 선택한 항목을 이 인덱스로 설정합니다.

BOOL IsItemChecked(int index)

이 메서드는 목록의 항목이 선택된 경우 TRUE를 반환합니다. 이 메서드를 사용하려면 SetExtendedStyle 을 호출하여 확인란 스타일을 설정해야 합니다.

int GetItemCount(void)

이 메서드는 목록 보기의 항목 수를 반환합니다.

HRESULT CreateImageList(int width, int height, UINT flags)

새 이미지 목록을 만들고 목록 보기에 연결합니다.

int AddImage(HINSTANCE hInstance, int resourceId)

목록 보기의 이미지 목록에 이미지를 추가합니다. 먼저 CreateImageList를 호출해야 합니다.

HRESULT SetImage(int index, int imageIndex)

특정 목록 보기 항목의 왼쪽에 표시될 이미지를 설정합니다.

HRESULT Clear(void)

목록 보기에서 모든 항목을 제거합니다.

IProgressBar 인터페이스

__interface IProgressBar : IControl  
{  
    HRESULT SetPercentage(int position);  
    int GetPercentage(void);  
};  
개요

이 인터페이스는 ProgressBarWrapper 구성 요소에 의해 구현됩니다. 형식이 CONTROL_PROGRESS_BARGetControlWrapper 도우미 함수를 사용하여 이 구성 요소의 인스턴스를 검색합니다.

HRESULT SetPercentage(int position)

0에서 100 사이의 숫자를 사용하여 진행률 표시줄의 위치를 설정합니다. 기본적으로 새 Win32® 진행률 표시줄의 최대 범위는 100입니다.

int GetPercentage(void)

이 메서드는 진행률 표시줄의 현재 위치를 반환합니다.

IRadioButton 인터페이스

__interface IRadioButton : IControl  
{  
public:  
    void SetGroup(int firstId, int lastId);  
    void CheckRadio(int id);  
    BOOL IsButtonChecked(int id);  
    void EnableRadio(int id, BOOL enable);  
};  
개요

이 인터페이스는 RadioButtonWrapper 구성 요소에 의해 구현됩니다. 형식이 CONTROL_RADIO_BUTTONGetControlWrapper 도우미 함수를 사용하여 이 구성 요소의 인스턴스를 검색합니다.

void SetGroup(int firstId, int lastId)

그룹으로 처리해야 하는 라디오 단추 범위를 래퍼에 제공합니다. CheckRadio를 호출하기 전에 이 메서드를 호출합니다.

void CheckRadio(int id)

특정 라디오 단추를 선택한 라디오 단추 그룹의 단일 단추로 설정합니다. 이 메서드를 호출하기 전에 SetGroup 을 호출합니다.

BOOL IsButtonChecked(int id)

이 메서드는 라디오 단추가 현재 선택된 경우 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

void EnableRadio(int id, BOOL enable)

이 메서드는 라디오 단추를 사용하거나 사용하지 않도록 설정합니다.

IStaticText 인터페이스

__interface IStaticText : IControl  
{  
    HRESULT SetText([in] LPCTSTR pText);  
    HRESULT GetText([out, retval] LPBSTR pText);  
};  
개요

이 인터페이스는 StaticTextWrapper 구성 요소에 의해 구현됩니다. 형식이 CONTROL_STATIC_TEXTGetControlWrapper 도우미 함수를 사용하여 이 구성 요소의 인스턴스를 검색합니다.

HRESULT SetText([in] LPCTSTR pText)

컨트롤의 텍스트를 설정합니다.

HRESULT GetText([out, retval] LPBSTR pText)

이 메서드는 컨트롤에 대한 텍스트의 현재 값을 반환합니다.

ITask 인터페이스

__interface IControl : IUnknown  
{  
    HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings);  
    HRESULT Execute(LPDWORD pReturnCode);  
};  

구성 요소를 실행 전 페이지에서 작업으로 사용하거나 BackgroundTask 구성 요소를 사용하여 백그라운드 스레드에서 작업을 수행하려는 경우 이 인터페이스를 구현합니다.

ITask 인터페이스를 구현하는 구성 요소는 다음과 같습니다.

  • ID_ShellExecuteTask, L"Microsoft. Wizard.ShellExecuteTask"

  • ID_CopyFilesTask, L"Microsoft. Wizard.CopyFilesTask"

  • ID_ACPowerTask, L"Microsoft. OSDRefresh.ACPowerTask"

  • ID_WiredNetworkTask, L"Microsoft. SharedPages.WiredNetworkTask"

Init
HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings)  

실행 전 페이지에 대한 작업을 작성하는 경우 이 메서드를 호출하여 작업을 초기화합니다. .config 파일에는 다음과 같은 XML이 포함되어 있습니다.

<Task DisplayName="Check Windows Scripting Host" Type="Microsoft.Wizard.ShellExecuteTask">  
  <Setter Property="filename">%windir%\system32\cscript.exe</Setter>  
  <Setter Property="parameters">Preflight\OSDCheckWSH.vbs</Setter>  
  <Setter Property="BitmapFilename">images\WinScriptHost.bmp</Setter>  
  <ExitCodes>  
    <ExitCode State="Success" Type="0" Value="0" Text="" />  
    <ExitCode State="Error" Type="-1" Value="*" Text="Windows Scripting Host not installed." />  
  </ExitCodes>  
</Task>  

pProperties 매개 변수는 세 개의 setter 값에 대한 액세스를 제공하는 반면 pTaskSettings 매개 변수는 Task 요소 및 자식에 대한 액세스를 제공합니다. 대부분의 작업은 pProperties 매개 변수에서만 데이터를 읽어야 합니다.

실행
HRESULT Execute(LPDWORD pReturnCode)  

작업을 수행하는 코드를 작성하는 위치는 다음과 같습니다. 이 메서드는 오류가 없는 경우 S_OK 반환해야 하며 작업이 실행되는 동안 오류가 발생한 경우 다른 HRESULT 를 반환할 수 있습니다. 이 메서드가 반환하는 S_OK 이외의 값은 실행 전 페이지를 사용하는 경우 ExitCodes> 섹션의 오류> 요소<와 <일치합니다.

pReturnCode 매개 변수는 작업 상태를 보고하는 숫자로 업데이트해야 합니다. 이러한 값은 실행 전 페이지에서 ExitCode> 요소와 <일치합니다.

ITreeView 인터페이스

__interface ITreeView : IControl  
{  
    void EnableCheckboxes(void);  
    HRESULT CreateImageList(int width, int height, UINT flags);  
    int AddImage(HINSTANCE hInstance, int resourceId);  

    HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL);  
    void SetImage(HTREEITEM item, int image, int expandImage);  

    void Clear(void);  
    BOOL SetFirstVisible(HTREEITEM item);  
    BOOL SelectItem(HTREEITEM item);  
    void CheckItem(HTREEITEM item, UINT checkState);  
    HTREEITEM SelectedItem(void);  
    int SetItemHeight(SHORT height);  
    HRESULT EnableItem(HTREEITEM item, BOOL enable);  
    void Expand(HTREEITEM hItem, BOOL expand);  

    HTREEITEM GetChild(HTREEITEM hParent);  
    HTREEITEM GetParent(HTREEITEM hNode);  
    HTREEITEM GetNextItem(HTREEITEM hPrevious);  

    UINT IsChecked(HTREEITEM item);  
    BOOL IsEnabled(HTREEITEM item);  

    INT_PTR CommonControlEvent(WORD controlId, void* pInfo, BOOL *pCancel);  
    HRESULT SetEventHandler(ITreeViewEvent *pEventHandler);  

    void SetSelectedBackColor(COLORREF color);  
};  
개요

이 인터페이스는 TreeViewWrapper 구성 요소에 의해 구현됩니다. 형식이 CONTROL_TREE_VIEWGetControlWrapper 도우미 함수를 사용하여 이 구성 요소의 인스턴스를 검색합니다.

void EnableCheckboxes(void)

이 메서드는 TVS_CHECKBOXES 스타일을 설정하여 트리 뷰 컨트롤에서 확인란을 켭니다.

HRESULT CreateImageList(int width, int height, UINT flags)

트리 뷰 컨트롤에 새 이미지 목록을 추가합니다. flags 매개 변수는 ImageList_Create Win32 함수에 대한 호출에서 전달됩니다.

int AddImage(HINSTANCE hInstance, int resourceId)

인스턴스 핸들 hInstance를 사용하여 모듈의 리소스(resourceId)에서 이미지 목록에 이미지를 추가합니다.

HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL)

트리 뷰에 노드를 추가합니다. hParent가 NULL인 경우 최상위 수준에서 새 노드가 추가됩니다. 그렇지 않으면 새 항목을 추가할 부모 항목에 핸들을 제공합니다. 이 메서드는 핸들을 새 항목에 반환합니다.

void SetImage(HTREEITEM item, int image, int expandImage)

트리 뷰 항목에 사용할 이미지를 설정합니다. 일반 이미지와 확장된 이미지를 모두 설정할 수 있습니다.

void Clear(void)

트리 뷰에서 모든 항목을 제거합니다.

BOOL SetFirstVisible(HTREEITEM 항목)

트리 뷰 항목이 표시되는지 확인합니다. 이 항목을 표시하려면 필요한 경우 트리 뷰가 스크롤됩니다.

BOOL SelectItem(HTREEITEM item)

현재 선택한 항목을 제공한 항목으로 설정합니다. 이 후에 SetFirstVisible 를 호출하여 새로 선택한 항목이 표시되는지 확인할 수 있습니다.

void CheckItem(HTREEITEM item, UINT checkState)

메서드는 기본적으로 트리 뷰의 확인란에 대해 표시할 이미지를 설정합니다. 이러한 이미지는 트리 뷰가 관리하는 별도의 ImageList 컨트롤에 있습니다. 기본적으로 이 이미지 목록에는 표 22에 표시된 세 개의 이미지가 있습니다.

표 22.void CheckItem 이미지 목록 기본값

checkState 설명
0 Blank
1 선택을 취소
2 선택됨
HTREEITEM SelectedItem(void)

이 메서드는 현재 선택된 트리 뷰 항목의 핸들을 반환합니다.

int SetItemHeight(SHORT 높이)

이 메서드는 트리 뷰 컨트롤에 있는 모든 항목의 높이를 픽셀 단위로 설정합니다. 이전 높이를 픽셀 단위로 반환합니다.

HRESULT EnableItem(HTREEITEM 항목, BOOL 사용)

이 메서드는 트리에서 단일 항목을 사용하거나 사용하지 않도록 설정합니다. 자식 항목을 사용하지 않도록 설정해도 자식 항목이 비활성화되지 않습니다.

void Expand(HTREEITEM hItem, BOOL expand)

이 메서드는 트리의 노드를 확장하거나 축소합니다.

HTREEITEM GetChild(HTREEITEM hParent)

이 메서드는 트리 뷰 항목의 첫 번째 자식 또는 자식이 없는 경우 NULL을 반환합니다.

HTREEITEM GetParent(HTREEITEM hNode)

이 메서드는 트리 뷰의 노드에 대한 부모 핸들을 반환하고 노드가 최상위 수준인 경우 NULL을 반환합니다.

HTREEITEM GetNextItem(HTREEITEM hPrevious)

GetChild가 노드의 모든 자식을 반복하기 위해 반환하는 핸들을 사용하여 이 메서드를 호출할 수 있습니다. 이 메서드는 동일한 부모를 공유하는 트리의 다음 형제를 반환합니다.

UINT IsChecked(HTREEITEM 항목)

이 메서드는 트리 뷰 노드가 선택되지 않은 경우 0 을 반환하고 이면 1 을 반환합니다.

BOOL IsEnabled(HTREEITEM 항목)

이 메서드는 트리 뷰 노드를 사용하도록 설정하면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

INT_PTR CommonControlEvent(WORD controlId, void* pInfo, BOOL *pCancel)

이 메서드는 내부 전용입니다.

HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)

선택한 항목이 변경되거나 사용자가 트리 뷰 항목의 확인 상태를 변경할 때 알림을 받으려면 이 메서드를 호출합니다. 이러한 콜백을 받으려면 구성 요소에서 ITreeViewEvent 를 구현해야 합니다.

void SetSelectedBackColor(COLORREF 색)

선택한 항목에 사용되는 배경색을 설정합니다.

IWmiIteration 인터페이스

__interface IWmiIterator : IUnknown  
{  
    HRESULT Next(void);  
    HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue);  
};  
개요

일반적으로 WMI 호출을 사용할 때 IWmiRepository와 함께 이 인터페이스를 사용합니다. IWmiIteration 인터페이스를 사용하면 쿼리가 반환하는 값을 반복할 수 있습니다.

HRESULT Next(void)

표 23과 같이 쿼리 결과의 다음 항목으로 이동합니다.

표 23. HRESULT Next(void) 쿼리 반환

HRRESULT 설명
S_ok 다음 결과로 이동되었습니다. GetProperty 를 사용하여 해당 결과의 속성을 검색할 수 있습니다.
S_false 목록에 항목이 더 이상 없습니다.
E_NOT_SET 쿼리 결과가 없습니다.
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue)

이 메서드는 표 24 및 표 25와 같이 현재 결과 레코드에서 속성 값을 검색합니다.

표 24. HRESULT GetProperty

매개 변수 설명
propertyName 검색할 속성의 이름
pValue 반환 시 속성 값이 포함된 VARIANT 구조를 가리킵니다.

표 25. HRESULT GetProperty 결과

Hresult 설명
S_ok 속성 값이 검색되었습니다.
WBEM_E_NOT_FOUND 이름을 가진 속성이 없습니다.
E_NOT_VALID_STATE 현재 레코드가 없는 경우

참고

GetProperty 메서드는 표 25에 나열된 코드 이외의 다른 WMI 오류 코드를 반환할 수 있습니다. 나열된 값은 반환되는 일반적인 결과입니다.

IWmiRepository 인터페이스

__interface IWmiRepository : IUnknown  
{  
    HRESULT SetNamespace(LPCWSTR namespaceName);  
    HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator);  
};  
개요

이 인터페이스는 WmiRepository 구성 요소(ID_WmiRepository)에 의해 구현됩니다.

HRESULT SetNamespace(LPCWSTR namespaceName)

이 메서드는 쿼리에 사용할 WMI 네임스페이스를 설정합니다. ExecQuery를 호출하기 전에 이 메서드를 호출합니다. 이 메서드를 호출하지 않으면 네임스페이스는 root\cimv2가 됩니다. 이 메서드는 항상 S_OK 반환합니다.

HRESULT ExecQuery(LPCWSTR 쿼리, [out] IWmiIterator **ppIterator)

표 26 및 표 27과 같이 SetNamespace를 호출하여 WMI 네임스페이스 집합에 대해 쿼리를 실행합니다.

표 26. HRESULT ExecQuery

매개 변수 설명
Query 실행하려는 WMI 쿼리의 문자열입니다.
ppIterator 인터페이스 포인터에 포인터를 전달합니다. 이 포인터는 반환할 때 인터페이스로 채워져 쿼리 결과에 대한 액세스 권한을 부여합니다.

표 27. HRESULT 쿼리 결과

Hresult 설명
S_ok 쿼리 성공
기타 쿼리가 성공하지 못한 경우 WMI HRESULT를 반환합니다.

IFormController 인터페이스

__interface IFormController : IUnknown  
{  
    Init(IWizardPageView *pView, IWizardPageContainer *pContainer);  
    SetPageInfo(ISettingsProperties *pPageInfo);  

    Validate(void);  

    AddToGroup(int groupControlId, int controlId);  
    UpdateCheckGroup(int groupControlId);  
    AddValidator(int controlId, IValidator *pValidator, IControl *pCOntrol = 0);  

    AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr);  
    DisableValidation(int controlId, BOOL disable);  

    AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type);  
    AddRadioGroup(LPCWSTR groupName, int radioControlId);  
    EnableRadioGroup(LPCWSTR groupName, BOOL enable);  
    InitFields(IFieldCallback *pFieldCallback = nullptr);  
    SaveFields(IFieldCallback *pFieldCallback = nullptr);  
    BOOL IsFieldDisabled(int controlId);  

    InitSection(LPCWSTR key, LPCWSTR sectionCaption);  
    AddSummaryItem(LPCWSTR first, LPCWSTR second);  
    SuppressLogValue(LPCWSTR tsVariableName);  
    SaveText(int controlId, LPCWSTR tsVariableName, LPCWSTR summaryCaption);  
    LoadText(int controlId, LPCWSTR tsVariableName);  

    void ControlEvent(WORD eventId, WORD controlId);  
    BOOL IsValid(void);  
 };  
개요

UDI 마법사의 각 페이지에는 이 인터페이스를 구현하는 고유한 양식 컨트롤러가 있습니다. 이 컨트롤러를 사용하여 .config XML 파일의 필드 데이터를 페이지의 컨트롤에 연결합니다. 양식 컨트롤러는 많은 세부 정보를 처리합니다.

양식 설정

일반적으로 페이지의 OnWindowCreated 메서드에서 양식 컨트롤러를 설정합니다. 이렇게 하려면 일반적으로 표 28에 표시된 메서드를 호출해야 합니다.

표 28. OnWindowCreated 메서드

방법 설명
Init 양식 컨트롤러 초기화
AddField 문자열 이름인 .config XML 파일의 필드와 ID인 페이지 대화 상자의 컨트롤 간에 연결을 제공합니다.
AddRadioGroup 대화 상자에서 그룹 및 컨트롤 모두에 라디오 단추를 연결하는 데 사용됩니다.
AddToGroup 부모와 함께 사용하거나 사용하지 않도록 설정하거나 선택한 라디오 단추에 따라 "자식" 컨트롤을 사용할 수 있습니다.
InitFields 양식을 설정하기 위해 모든 Add 메서드를 호출한 후 를 호출합니다.
유효성 검사 초기 유효성 검사를 수행합니다.
양식 이벤트 처리

OnControlEvent 메서드에 다음 호출을 추가합니다.

Form()->ControlEvent(eventId, controlId);  

이 호출은 양식 관련 이벤트를 처리할 수 있도록 폼 컨트롤러에 이벤트를 전달합니다.

양식 데이터 저장

OnNextClicked 메서드에서 표 29에 표시된 양식 메서드를 호출합니다.

표 29. OnNextClicked 메서드

방법 설명
InitSection 이 페이지의 요약 페이지에 표시될 섹션의 이름을 제공합니다.
SaveFields 작업 순서 변수 및 요약 페이지에 필드 값 저장
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)  

일반적으로 페이지의 OnWindowCreated 메서드가 시작될 무렵에 이 메서드를 호출합니다. 명령은 다음과 같이 표시됩니다.

Form()->Init(View(), Container());  
SetPageInfo
HRESULT SetPageInfo(ISettingsProperties *pPageInfo)  

이 메서드는 내부적으로 호출되며 직접 호출해서는 안 됩니다. 양식 컨트롤러에 페이지의 XML을 제공합니다.

유효성 검사
HRESULT Validate(void)  

이 메서드는 컨트롤에 연결된 모든 유효성 검사기를 실행합니다. 유효성 검사기가 통과하지 못하면 양식 컨트롤러가 경고 메시지를 표시하고 다음 단추를 사용하지 않도록 설정한 다음 유효성 검사기 처리를 중지합니다. 일반적으로 OnWindowCreated 메서드의 끝에서만 이 메서드를 호출하면 됩니다. 항상 S_OK 반환합니다.

AddToGroup
AddToGroup(int groupControlId, int controlId)  

이 메서드는 표 30에 표시된 것처럼 확인란 또는 라디오 단추의 "자식"으로 컨트롤을 추가합니다. 부모 컨트롤을 선택하지 않으면 이러한 모든 자식 컨트롤이 비활성화됩니다. 메서드는 항상 S_OK 반환합니다.

표 30. AddToGroup

매개 변수 설명
groupControlId 자식 컨트롤의 사용 상태를 제어하는 확인란 또는 라디오 단추의 ID
제어됨 자식으로 추가할 컨트롤의 ID입니다.
UpdateCheckGroup
HRESULT UpdateCheckGroup(int groupControlId)  

이 메서드는 부모 컨트롤의 상태에 따라 그룹의 자식 컨트롤의 사용 또는 사용 안 함 상태를 업데이트합니다. 일반적으로 양식 컨트롤러에서 이 메서드를 호출하기 때문에 이 메서드를 직접 호출할 필요가 없습니다.

AddValidator
HRESULT AddValidator(int controlId, IValidator *pValidator, IControl *pControl = 0)  

XML 대신 코드에서 만들 유효성 검사기가 있는 경우에만 이 메서드를 호출합니다. 이 메서드는 항상 S_OK 반환합니다.

AddValidator
HRESULT AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr)  

XML 대신 코드에서 만들 유효성 검사기가 있는 경우에만 이 메서드를 호출합니다.

DisableValidation
HRESULT DisableValidation(int controlId, BOOL disable)  

표 31과 같이 컨트롤에 대한 유효성 검사기를 명시적으로 사용하지 않도록 설정하거나 일반 유효성 검사를 복원하려면 이 메서드를 호출합니다. 이 메서드는 예를 들어 양식 유효성 검사에서 다루지 않는 컨트롤에 대한 사용/사용 안 함 규칙이 있고 컨트롤에 대한 유효성 검사를 사용하지 않도록 설정해야 하는 경우에 유용합니다. 즉, 일반적으로 이 메서드를 호출하지 않습니다. 이 메서드는 항상 S_OK 반환합니다.

표 31. HRESULT DisableValidation

매개 변수 설명
Controlid 유효성 검사를 사용하거나 사용하지 않도록 설정할 컨트롤
Disable 유효성 검사를 사용하지 않도록 설정하고 일반 유효성 검사를 복원하려면 FALSE로 설정합니다.
AddField
HRESULT AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type)  

표 32와 같이 .config XML 파일의 Field 요소 이름과 페이지 대화 상자의 컨트롤 ID 사이에 컨트롤 매핑을 추가합니다. InitFields는 이 정보를 사용하므로 InitFields를 호출하기 전에 이 메서드를 호출해야 합니다. 이 메서드는 항상 S_OK 반환합니다.

표 32. HRESULT AddField

매개 변수 설명
Fieldname 페이지의 XML에 표시되는 필드의 이름
Controlid 페이지의 대화 상자 템플릿에 있는 컨트롤의 ID
suppressLog 이 필드의 값을 로그 파일에 쓰지 않으려면 TRUE로 설정합니다. 항상 암호 또는 PIN 필드에 대해 이 매개 변수를 TRUE로 설정합니다.
종류 다음 중 하나인 컨트롤 형식입니다.

- CONTROL_STATIC_TEXT
- CONTROL_COMBO_BOX
- CONTROL_LIST_VIEW
- CONTROL_PROGRESS_BAR
- CONTROL_GENERIC
- CONTROL_RADIO_BUTTON
- CONTROL_CHECK_BOX
- CONTROL_TREE_VIEW
AddRadioGroup
HRESULT AddRadioGroup(LPCWSTR groupName, int radioControlId)  

이 메서드는 표 33과 같이 명명된 라디오 단추 그룹에 컨트롤을 추가합니다. 이 메서드는 RadioGroup 요소의 특성을 사용하여 그룹의 모든 라디오 단추 컨트롤에 대한 설정을 제어하기 때문에 InitFields 메서드 앞에 이를 호출해야 합니다. 예를 들어 모든 라디오 단추를 사용할 수 없도록 라디오 그룹을 잠글 수 있지만 선택한 라디오 단추에 따라 자식 컨트롤을 사용하거나 사용하지 않도록 설정할 수 있습니다. 이 메서드는 항상 S_OK 반환합니다.

표 33. HRESULT AddRadioGroup

매개 변수 설명
Groupname 이 페이지의 라디오 단추 그룹을 정의하는 문자열
radioControlId 이 그룹에 추가할 단일 라디오 단추의 ID
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)  

이 메서드를 사용하면 전체 라디오 단추 그룹을 사용하거나 사용하지 않도록 설정할 수 있습니다. 라디오 그룹을 사용하지 않도록 설정하면 그룹의 모든 라디오 단추 컨트롤과 AddToGroup에 추가된 해당 라디오 단추의 자식이 비활성화됩니다. 표 34 및 표 35를 참조하세요.

표 34. EnableRadioGroup

매개 변수 설명
Groupname AddRadioGroup 호출을 사용하여 이미 정의한 라디오 단추 그룹의 이름
사용 라디오 단추 그룹을 사용하도록 설정하려면 TRUE로 설정하고 FALSE로 설정하여 그룹을 사용하지 않도록 설정합니다.

표 35. HRESULT EnableRadioGroup

Hresult 설명
S_ok 그룹 사용 또는 사용 안 함
E_INVALIDARG 제공한 이름을 가진 라디오 단추 그룹이 없습니다.
InitFields
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)  

이 메서드를 호출하기 전에 XML에서 제어할 수 있는 각 필드에 대해 AddField 를 호출합니다. 이 메서드는 항상 S_OK 반환합니다.

pFieldCallback 매개 변수는 선택 사항입니다. 제공하는 경우 양식 컨트롤러는 CONTROL_STATIC_TEXT 또는CONTROL_CHECK_BOX 아닌 컨트롤에 대해 SetFieldDefault를 호출합니다. 이 동작을 사용하면 XML에서 기본값을 검색하고 컨트롤에서 직접 설정할 수 있습니다.

SaveFields
HRESULT SaveFields(IFieldCallback *pFieldCallback = nullptr)  

이 메서드는 필드 값을 작업 순서 변수 및 요약 페이지에 표시 할 요약 데이터에 저장합니다. pFieldCallback에 포인터를 제공하면 CONTROL_STATIC_TEXT 지원하지 않는 컨트롤에 대한 저장 값을 처리할 있습니다.

IsFieldDisabled
BOOL IsFieldDisabled(int controlId)  

이 메서드를 사용하면 XML에서 필드가 비활성화되었는지 여부를 확인할 수 있습니다.

InitSection
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)  

이 메서드는 표 36과 같이 요약 페이지에 표시될 요약 데이터를 초기화합니다. SaveFields를 호출하기 전에 OnNextClicked 메서드에서 이 메서드를 호출합니다. 이 메서드는 항상 S_OK 반환합니다.

표 36. HRESULT InitSection

매개 변수 설명
이 매개 변수는 페이지에 고유해야 합니다. 각 페이지에 고유한 요약 정보가 있는지 확인하는 데 사용됩니다.
sectionCaption 이 페이지의 요약 정보에 대한 요약 페이지에 표시될 헤더입니다. 일반적으로 DisplayName() 을 이 매개 변수의 값으로 사용합니다.
AddSummaryItem
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)  

이 메서드를 사용하면 XML로 설정된 항목 위와 그 너머의 요약 페이지에 요약 항목을 추가할 수 있습니다. 표 37을 참조하세요.

표 37. HRESULT AddSummaryItem

매개 변수 설명
첫 번째 왼쪽에 표시된 요약 항목의 캡션
두 번째 오른쪽에 표시될 값입니다.
SuppressLogValue
HRESULT SuppressLogValue(LPCWSTR tsVariableName)  

값을 로그 파일에 쓰지 않으려는 작업 순서 변수에 대해 이 메서드를 호출합니다. 사용자가 입력할 수 있는 암호, PIN 또는 기타 중요한 값을 저장하는 작업 순서 변수에 대해 이 메서드를 호출합니다.

SaveText
HRESULT SaveText(int controlId, LPCWSTR tsVariableName, LPCWSTR summaryCaption)  

이 메서드는 텍스트 컨트롤의 값을 작업 순서 변수와 요약 섹션 모두에 저장합니다. 양식 컨트롤러가 모든 필드에 대해 이 작업을 수행하므로 일반적으로 이 메서드를 직접 호출할 필요가 없습니다. 표 38을 참조하세요.

표 38. HRESULT SaveText

매개 변수 설명
Controlid 저장할 값이 들어 있는 텍스트 상자의 ID(또는 텍스트를 반환할 수 있는 다른 컨트롤)
tsVariableName 수정할 작업 순서 변수의 이름
summaryCaption 이 값에 대한 요약 페이지의 캡션
LoadText
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)  

이 메서드는 작업 순서 변수의 값을 읽고 텍스트 상자를 이 값으로 설정합니다.

ControlEvent
void ControlEvent(WORD eventId, WORD controlId)  

OnControlEvent 메서드에서 이 메서드를 호출하여 양식 컨트롤러가 제대로 작동하기 위해 수행해야 하는 제어 이벤트를 처리할 수 있는지 확인합니다. 이 메서드에 전달하는 값은 OnControlEvent 메서드에 전달된 값과 동일합니다.

Isvalid
BOOL IsValid(void)  

이 메서드는 폼의 최신 유효성 검사 상태를 반환합니다. 컨트롤 유효성 검사기가 오류를 보고한 경우 이 메서드는 FALSE를 반환합니다. 즉, 페이지의 모든 컨트롤이 유효한 경우에만 TRUE를 반환합니다.

IValidator 인터페이스

__interface IValidator : IUnknown  
{  
    HRESULT Init(IControl *pControl, LPCTSTR message);  
    HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties);  
    BOOL, IsValid(LPBSTR pMessage);  
    HRESULT SetProperty(int propertyId, LPVARIANT pValue);  
    HRESULT SetProperty(int propertyId, IUnknown *pUnknown);  
    HRESULT SetProperty)(int propertyId, LPCTSTR pValue);  
};  
개요

유효성 검사기는 페이지에서 단일 컨트롤의 유효성을 검사할 수 있는 구성 요소입니다. 유효성 검사기를 구현하는 가장 쉬운 방법은 BaseValidator.h 헤더 파일에 정의된 BaseValidator 클래스의 하위 클래스로 만드는 것입니다.

HRESULT Init(IControl *pControl, LPCTSTR 메시지)

코드에서 유효성 검사기를 만드는 경우 이 메서드를 호출하여 유효성 검사기를 초기화할 수 있습니다. 표 39를 참조하세요.

표 39. HRESULT Init

매개 변수 설명
pControl 유효성 검사기에서 유효성을 검사해야 하는 컨트롤
메시지 컨트롤이 유효하지 않은 경우 페이지에 표시할 메시지입니다.
HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties)

양식 컨트롤러는 이 메서드를 호출하여 페이지의 XML에 따라 만드는 유효성 검사기를 초기화합니다. 표 40을 참조하세요.

표 40. HRESULT Init 메서드

매개 변수 설명
pControl 유효성 검사기에서 유효성을 검사해야 하는 컨트롤
pContainer 유효성 검사기가 로거에 액세스해야 하거나 다른 구성 요소를 만들어야 하는 경우
pProperties 유효성 검사기의 속성(setter 요소)에 대한 액세스를 제공합니다.
BOOL, IsValid(LPBSTR pMessage)

컨트롤이 유효한 경우 이 메서드는 TRUE를 반환하고 컨트롤이 잘못된 경우 FALSE를 반환합니다. 반환 시 pMessage 는 컨트롤이 유효하지 않을 때 표시할 메시지가 포함된 새 BSTR 로 채워져야 합니다.

HRESULT SetProperty(int propertyId, LPVARIANT pValue)

XML에 제공되지 않은 추가 값이 필요한 경우 이 메서드를 구현할 수 있습니다.

HRESULT SetProperty(int propertyId, IUnknown *pUnknown)

XML에 제공되지 않은 추가 값이 필요한 경우 이 메서드를 구현할 수 있습니다.

HRESULT SetProperty)(int propertyId, LPCTSTR pValue)

XML에 제공되지 않은 추가 값이 필요한 경우 이 메서드를 구현할 수 있습니다.

IRegEx 인터페이스

__interface IRegEx : IUnknown  
{  
    BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex);  
    HRESULT GetMatch(size_t index, LPBSTR pValue);  
};  

이 메서드는 ID_Regex 구성 요소(IRegex.h)에서 구현되며 정규식 처리를 지원합니다.

BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex)

이 메서드는 입력 텍스트에 대해 정규식을 실행합니다. C++ 표준 라이브러리의 regex_match 함수를 사용하여 실제 작업을 수행합니다. 일치하는 항목이 있으면 메서드가 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

HRESULT GetMatch(size_t 인덱스, LPBSTR pValue)

이 메서드를 사용하면 가장 최근 MatchesRegex 호출에서 일치 항목을 검색할 수 있습니다. 이 메서드에는 오류 처리가 없으며 S_OK 반환하거나 예외를 throw합니다.

ISummaryInfo 인터페이스

__interface ISummaryInfo : IUnknown  
{  
    size_t Count(void);  
    HRESULT Clear(void);  
    HRESULT AddInfo(LPCTSTR pFirst, LPCTSTR pSecond);  
    HRESULT GetInfo(size_t index, LPBSTR pFirst, LPBSTR pSecond);  
    HRESULT GetCaption(LPBSTR pCaption);  
    HRESULT SetCaption(LPCTSTR caption);  
};  

이 인터페이스를 직접 사용할 필요는 없습니다. 대신 IFormController를 사용합니다.

ISummaryBag

__interface ISummaryBag : IUnknown  
{  
    size_t Count(void);  
    HRESULT GetInfoByIndex(size_t index, [out] ISummaryInfo **ppSummary);  
    HRESULT GetInfoByKey(LPCTSTR key, [out] ISummaryInfo **ppSummary);  
};  

이 인터페이스를 직접 사용할 필요는 없습니다. 대신 IFormController를 사용합니다.

ITSVariableBag 인터페이스

__interface ITSVariableBag : IUnknown  
{  
    void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue);  
    void SetValue([in] LPCTSTR variableName, [in] LPCTSTR pValue);  
    void Clear(void);  
    HRESULT Remove([in] LPCTSTR variableName);  
    HRESULT SuppressLogValue([in] LPCTSTR variableName);  
    void Save(void);  
};  

이 인터페이스는 작업 순서 변수에 대한 액세스를 제공합니다. 페이지의 TSVariables() 메서드를 사용하여 이 인터페이스에 액세스할 수 있습니다.

void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue)

이 메서드는 작업 순서 변수의 값을 읽습니다.

참고

값은 첫 번째 읽기 후에 캐시됩니다.

void SetValue([in] LPCTSTR variableName, [in] LPCTSTR pValue)

이 메서드는 작업 순서 변수의 값을 설정합니다. 이 값은 메모리에 저장됩니다. UDI 마법사에서 마침 을 클릭하면 작업 순서 값이 작성됩니다.

void Clear(void)

이 메서드는 메모리에 저장된 모든 작업 순서 값을 제거합니다.

HRESULT Remove([in] LPCTSTR variableName)

이 메서드는 메모리에서 특정 작업 순서 값을 제거합니다. 다음에 동일한 작업 순서 이름으로 GetValue 를 호출할 때 메서드는 작업 순서에서 검색을 시도합니다.

HRESULT SuppressLogValue([in] LPCTSTR variableName)

UDI 마법사에서 마침 을 클릭할 때와 같이 작업 순서 변수를 쓸 때마다 이름과 값이 로그 파일에 기록됩니다. 이 메서드를 호출하여 특정 작업 순서 변수에 대해 암호 또는 PIN과 같은 중요한 값의 로깅을 표시하지 않습니다.

void Save(void)

이 메서드는 SetValue 호출로 설정된 모든 작업 순서 값을 저장합니다.

ITSVariableRepository 인터페이스

__interface ITSVariableRepository : IUnknown  
{  
    void GetValue([in] LPCTSTR variableName, BOOL logValue, [out] LPBSTR pValue);  
    void SetValue([in] LPCTSTR variableName, BOOL logValue, [in] LPCTSTR value);  
};  

이 인터페이스는 TSVariableBag 에서 작업 순서 변수를 읽고 쓰는 데 내부적으로 사용하기 위한 것입니다.

IWizardFinish 인터페이스

__interface IWizardFinish : IUnknown  
{  
    HRESULT Canceled(void);  
    HRESULT Finished(void);  
};  

이 인터페이스는 UDI 마법사에서 마침 또는 취소 를 클릭할 때 추가 처리를 수행하려는 고급 시나리오에서 유용합니다. UDI 마법사에는 마침 을 클릭할 때 작업 순서 변수를 저장하는 마침 작업이 포함되어 있습니다. 마법사를 취소하는 경우 작업은 OSDSetupWizCancelled 작업 순서 변수만 TRUE로 설정하고 다른 작업 순서 변수에 대한 변경 내용을 저장하지 않습니다.

사용자 고유의 완료 구성 요소를 만드는 경우 다음과 같은 코드에 등록해야 합니다.

Register<MyFinishTaskFactory>(ID_MyFinishTask, pRegistry);  

PWizardFinish pFinish;  
CreateInstance(pRegistry, ID_MyFinishTask, &pFinish);  

PWizardFinishService pService;  
GetService<IWizardFinishService>(pRegistry, &pService);  

pService->Register(pFinish);  

IBindableList 인터페이스

__interface IBindableList : IUnknown  
{  
    size_t Count(void);  
    HRESULT GetCaption(size_t index, LPBSTR pCaption);  
};  

Bind 메서드를 호출하여 콤보 상자에 바인딩하려는 데이터 원본 구성 요소가 있는 경우 이 인터페이스를 구현합니다.

size_t Count(void)

이 메서드는 목록의 항목 수를 반환합니다.

HRESULT GetCaption(size_t 인덱스, LPBSTR pCaption)

이 메서드는 특정 인덱스에서 항목의 캡션을 반환합니다.

IDataNodes 인터페이스

__interface IDataNodes : IUnknown  
{  
    size_t Count();  
    HRESULT SetCaptionProperty(LPCTSTR captionProperty);  
    HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue);  
    HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode);  
};  

이 인터페이스는 페이지에 저장할 수 있는 계층적 데이터에 대한 액세스를 제공합니다. 설정 메서드를 통해 페이지에서 사용할 수 있는 ISettingsProperties 인터페이스의 메서드를 통해 이 인터페이스를 가져옵니다.

페이지의 XML에 있는 데이터는 다음과 같이 표시할 수 있습니다.

      <Data Name="Network">  
        <DataItem>  
          <Setter Property="DisplayName">Public</Setter>  
          <Setter Property="Share">\\servername\Share</Setter>  
        </DataItem>  
        <DataItem>  
          <Setter Property="DisplayName">Dev Team</Setter>  
          <Setter Property="Share">\\servername\DevShare</Setter>  
        </DataItem>  
      </Data>  

설정()->GetDataNode(L"Network", &pData)를 호출하면 두 개의 데이터 항목이 있는 IDataNodes 인스턴스가 제공됩니다(각각 두 개의 속성이 있음).

size_t Count()

이 메서드는 DataItem 요소의 수를 반환합니다.

HRESULT SetCaptionProperty(LPCTSTR captionProperty)

이 인터페이스를 지원하는 구성 요소는 IBindableList도 지원하므로 페이지의 XML에서 데이터를 사용하여 콤보 상자를 쉽게 채울 수 있습니다. 이 메서드는 이 바인딩에 사용할 각 DataItem 요소의 속성(setter)을 제어합니다. 예를 들어 DisplayName을 사용하여 이 메서드를 호출할 수 있으며 데이터 바인딩에 해당 setter 속성을 사용합니다. 그러면 콤보 상자에 PublicDev Team 이 항목으로 포함됩니다.

HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue)

이 메서드는 DataItem 요소 중 하나에서 속성을 가져옵니다. 표 41 및 표 42를 참조하세요.

표 41. DataItem GetProperty

매개 변수 설명
색인 속성 값을 검색하려는 DataItem 의 인덱스 값(0부터 시작)입니다.
propertyName 값을 검색할 setter 속성의 이름
propertyValue 반환 시 속성의 문자열 값을 포함합니다.

표 42. HRESULT GetProperty

Hresult 설명
S_ok 속성이 검색되었습니다.
E_INVALIDARG 인덱스가 배열의 끝을 지났습니다.
HRESULT GetNode(size_t 인덱스, [out] ISettingsProperties **ppNode)

이 메서드는 GetProperty와 비슷하지만 DataItem에서 하나의 값을 반환하는 대신 ISettingsProperties 인터페이스에 래핑된 전체 DataItem을 반환합니다. 표 43 및 표 44를 참조하세요.

표 43. HRESULT GetNode

매개 변수 설명
색인 속성 값을 검색하려는 DataItem 의 인덱스 값(0부터 시작)입니다.
ppNode 종료 시 DataItem 노드를 래핑하는 ISettingsProperties 인터페이스

표 44. HRESULT GetNode 결과

Hresult 설명
S_ok 노드가 검색되었습니다.
E_INVALIDARG 인덱스가 배열의 끝을 지났습니다.

IFactoryRegistry 인터페이스

__interface IFactoryRegistry : IUnknown  
{  
    void Register(LPCTSTR type,  IClassFactory *pFactory);  
    HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger);  
    BOOL Contains(LPCTSTR type);  
    HRESULT GetFactory(LPCTSTR type,  IClassFactory **ppFactory);  
    HRESULT CreateInstance(LPCTSTR type,  IUnknown **ppInstance);  
    HRESULT SetContainer(IWizardPageContainer *pContainer);  
    HRESULT RegisterService(REFGUID iid, IUnknown *pService);  
    HRESULT GetService(REFGUID iid,  IUnknown **ppService);  
};  
개요

새 사용자 지정 페이지를 만들 때 최소한 IClassFactory를 구현하는 클래스인 페이지 팩터리를 만들어야 합니다. ( ClassFactoryImpl 을 팩터리의 기본 클래스로 사용할 수 있습니다.)

void Register(LPCTSTR type, IClassFactory *pFactory)

이 메서드는 클래스 팩터리를 레지스트리에 등록합니다. 표 45를 참조하세요.

표 45. IClassFactory void Register

매개 변수 설명
종류 등록하는 팩터리를 식별하는 문자열입니다. 일반적으로 이 매개 변수는 고유한지 확인하기 위해 문자열에 회사 이름이 있어야 합니다.
pFactory 클래스 팩터리 인스턴스에 대한 포인터
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger)

이 메서드는 내부 전용입니다.

BOOL Contains(LPCTSTR 형식)

이 메서드는 일반적으로 내부용입니다. 클래스 팩터리에서 형식에 대해 등록되었는지 여부를 확인합니다.

HRESULT GetFactory(LPCTSTR 형식, IClassFactory **ppFactory)

이 메서드를 사용하면 클래스 팩터리를 검색할 수 있습니다. 일반적으로 CreateInstance를 호출합니다. 그러나 많은 수의 동일한 구성 요소를 만들려는 경우 팩터리를 검색한 다음 인스턴스를 만들도록 요청하는 것이 더 효율적입니다.

HRESULT CreateInstance(LPCTSTR 형식, IUnknown **ppInstance)

이 메서드는 해당 형식이 지정된 구성 요소의 새 인스턴스를 만듭니다. 대신 CreateInstance 템플릿 메서드를 사용하여 형식이 안전한 개체를 만들 수 있습니다.

HRESULT SetContainer(IWizardPageContainer *pContainer)

이 메서드는 내부 전용입니다.

HRESULT RegisterService(REFGUID iid, IUnknown *pService)

서비스는 여러 위치에서 사용할 수 있는 구성 요소의 단일 인스턴스입니다. 이 메서드를 사용하여 한 페이지에 서비스를 등록한 다음, 다른 페이지에서 동일한 인스턴스를 검색할 수 있습니다.

HRESULT GetService(REFGUID iid, IUnknown **ppService)

이 메서드는 RegisterService 호출을 사용하여 이전에 등록된 서비스를 검색합니다.

HRESULT SetLanguage(LANGID languageId)

이 메서드는 UDI 마법사의 언어를 languageId 매개 변수에서 제공한 언어 식별자로 설정합니다.

LANGID GetLanguage()

이 메서드는 UDI 마법사에 대한 /locale 명령줄 매개 변수와 함께 제공한 언어 식별자의 값을 반환합니다. 메서드는 다음 값 중 하나를 반환합니다.

  • /locale 명령줄 매개 변수와 함께 제공되는 언어 식별자의 값

  • /locale 명령줄 매개 변수를 제공하지 않은 경우 0

ILogger 인터페이스

__interface ILogger : IUnknown  
{  
    HRESULT Init(LPCWSTR logFilename);  
    HRESULT MoveLog(LPCWSTR logFilename);  
    HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message);  
    HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message);  
    HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message);  
    HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2);  
    HRESULT Normal(LPCTSTR component, LPCTSTR message);      
    HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2);  
    HRESULT Verbose(LPCTSTR component, LPCTSTR message);  
    HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2);  
    HRESULT Debug(LPCWSTR component, LPCWSTR message);  
    HRESULT EnableDebug(BOOL debug);  
    HRESULT Close(void);  
    HRESULT GetLogFilename(LPBSTR pFilename);  
};  
개요

UDI 마법사는 로그 파일에 정보를 기록하여 필드에 있는 문제를 해결하는 데 도움이 됩니다. 페이지에서 정보를 기록하는 것이 좋습니다. 페이지의 Logger() 메서드를 사용하여 페이지 내에서 이 인터페이스에 대한 포인터를 가져올 수 있습니다. 로그 파일의 줄에는 오류, 정상, 자세한 정보 표시 또는 디버그 메시지를 나타내는 "수준" 번호가 포함되어 있습니다.

참고

디버그 지원이 켜져 있지 않으면 디버그 메시지는 로그 파일에 저장되지 않습니다. .config 파일의 Style 요소에 다음 줄을 추가하여 디버그 지원을 설정할 수 있습니다.

<Setter Property="debug">true</Setter>  
Init
HRESULT Init(LPCWSTR logFilename)  

이 메서드는 내부 전용입니다.

MoveLog
HRESULT MoveLog(LPCWSTR logFilename)  

이 메서드는 내부 전용입니다.

LogBase
HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message)  

이 메서드는 내부 전용입니다.

로그
HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message)  

이 메서드는 내부 전용입니다.

오류
HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message)  

오류에 대한 정보를 기록하려면 이 메서드를 호출합니다. 표 46을 참조하세요.

표 46. HRESULT 오류

매개 변수 설명
오류 호출에서 반환된 오류 코드입니다(이 코드는 로그 항목에 숫자로 표시됩니다.)
구성 요소 오류의 원본을 식별하는 문자열로, 일반적으로 페이지 또는 작성한 구성 요소입니다.
메시지 오류의 원인을 설명하는 메시지
오류 2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)  

이 메서드는 Error 메서드와 비슷하지만 두 부분으로 구성된 메시지를 제공할 수 있습니다. 최종 메시지에는 출력 파일에 "message"와 "message2"가 있습니다. 이것은 단순히 편리한 방법입니다.

표준
HRESULT Normal(LPCTSTR component, LPCTSTR message)  

이 메서드는 일반 메시지를 기록합니다. 매개 변수는 Error 메서드에 대한 설명을 참조하세요.

Normal2
HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)  

이 메서드는 일반 메시지를 기록합니다. 매개 변수는 Error2 메서드에 대한 설명을 참조하세요.

자세한 정보
HRESULT Verbose(LPCTSTR component, LPCTSTR message)  

이 메서드는 자세한 메시지를 기록합니다. 매개 변수는 Error 메서드에 대한 설명을 참조하세요.

Verbose2
HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)  

이 메서드는 자세한 메시지를 기록합니다. 매개 변수는 Error2 메서드에 대한 설명을 참조하세요.

디버그
HRESULT Debug(LPCWSTR component, LPCWSTR message)  

이 메서드는 디버그 메시지를 기록합니다. 매개 변수는 Error 메서드에 대한 설명을 참조하세요. 디버그 메시지는 사용하도록 설정하지 않으면 파일에 저장되지 않습니다. 자세한 내용은 개요 섹션을 참조하세요.

EnableDebug
HRESULT EnableDebug(BOOL debug)  

이 메서드는 내부 전용입니다.

종료
HRESULT Close(void)  

이 메서드는 내부 전용입니다.

GetLogFilename
HRESULT GetLogFilename(LPBSTR pFilename)  

이 메서드는 로그 파일의 이름을 검색합니다.

IOrientation 인터페이스

__interface IOrientation : IUnknown  
{  
    void SetController(IWizardDialogController *pController);  
    int AddPage(LPCTSTR name);  
    void SelectPage(int index);  
};  

이 인터페이스는 내부 전용입니다.

ISettings 인터페이스

__interface ISettings : IUnknown  
{  
    int NumDlls();  
    int NumPages();  

    HRESULT SetStage(LPCWSTR stageName);  
    HRESULT GetDllName(long index, __out LPBSTR pDllName);  
    HRESULT GetPageInfo(long index, __out ISettingsProperties **ppPageInfo);  
    HRESULT GetStyle(__out ISettingsProperties **ppStyleInfo);  
};  

이 인터페이스는 내부 전용입니다.

ISettingsProperties 인터페이스

__interface ISettingsProperties : IUnknown  
{  
    HRESULT GetAttribute(LPCTSTR attributeName, __out LPBSTR attributeValue);  
    IStringProperties * Properties();  
    HRESULT SelectNodes(LPCTSTR xPath, __out IXMLDOMNodeList **ppList);  
    HRESULT SelectSingleNode(LPCTSTR xPath, __out IXMLDOMNode **ppNode);  
    HRESULT GetDataNode(LPCTSTR name, __out ISettingsProperties **ppNode);  
    HRESULT GetDataNodes(__out IDataNodes **ppNodes);  
    HRESULT GetChildDataNodes(LPCTSTR childeName, __out IDataNodes **ppNodes);  
};  
개요

이 인터페이스는 페이지 데이터에 대한 액세스를 제공합니다. 페이지 데이터의 최상위 수준으로 이동하려면 페이지의 Settings() 메서드를 사용합니다.

HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)

이 메서드를 사용하면 페이지의 Settings() 메서드를 사용할 때 페이지 노드인 주 노드에서 특성 값을 검색할 수 있습니다.

IStringProperties * Properties()

이 메서드는 기본 노드 아래의 setter 속성 값에 대한 액세스를 제공합니다. 페이지의 경우 최상위 속성입니다.

HRESULT SelectNodes(LPCTSTR xPath, IXMLDOMNodeList **ppList)

XPath 식을 사용하여 XML 노드 목록을 직접 얻으려면 이 메서드를 호출합니다. 가능하면 다른 방법 중 하나를 사용하는 것이 좋습니다. 다른 방법으로 노드에 연결할 수 없는 경우에만 이 메서드를 사용합니다.

HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)

XPath 식을 사용하여 단일 XML 노드를 직접 얻으려면 이 메서드를 호출합니다. 가능하면 다른 방법 중 하나를 사용하는 것이 좋습니다. 다른 방법으로 노드에 연결할 수 없는 경우에만 이 메서드를 사용합니다.

HRESULT GetDataNode(LPCTSTR name, ISettingsProperties **ppNode)

해당 요소의 Name 특성에 따라 Data 요소를 검색합니다.

HRESULT GetDataNodes(IDataNodes **ppNodes)

이 메서드는 현재 노드 아래의 DataItem 요소 목록을 검색합니다. 페이지 수준에서 GetDataNode 를 호출하여 데이터에 대한 ISettingsProperty 인터페이스를 검색합니다. 그런 다음, 해당 인스턴스에서 GetDataNodes 를 호출하여 레코드 목록을 검색합니다. 예를 들어 이 XML을 지정합니다.

    <Page ...>  
      <Data Name="Network">  
        <DataItem>  
          <Setter Property="DisplayName">Public</Setter>  
          <Setter Property="Share">\\servername\Share</Setter>  
        </DataItem>  
        <DataItem>  
          <Setter Property="DisplayName">Dev Team</Setter>  
          <Setter Property="Share">\\servername\DevShare</Setter>  
        </DataItem>  
      </Data>  
PSettingsProperties pData;  
Settings()->GetDataNode(L"Network", &pData);  
PDataNodes pNodes;  
pData->GetDataNodes(&pNodes);  
HRESULT GetChildDataNodes(LPCTSTR childeName, IDataNodes **ppNodes)

이 메서드는 특정 데이터 노드 아래의 DataItem 노드 집합에 빠르게 연결할 수 있는 방법을 제공합니다. GetDataNodes 예제의 XML을 사용하여 다음 코드는 GetDataNodes 아래 예제의 4개 코드 줄과 정확히 동일한 작업을 수행하지만 오류 검사를 수행합니다.

ISimpleStringProperties Interface  

ISimpleStringProperties 인터페이스

__interface ISimpleStringProperties : IStringProperties  
{  
void Add(LPCTSTR propertyName, LPCTSTR value);  
};  

그 자체로 이 인터페이스는 유용하지 않을 수 있습니다. 그러나 IStringProperties 인터페이스도 구현하는 ID_SimpleStringProperties 구성 요소에 의해 구현됩니다. 작업과 같은 다른 구성 요소에 속성 집합을 전달해야 하지만 XML의 값을 사용하는 대신 프로그래밍 방식으로 값을 추가하려는 경우 이 구성 요소를 사용할 수 있습니다. 다음은 이 인터페이스를 사용하는 방법의 예입니다.

PSimpleStringProperties *pProperties;  
CreateInstance(Container(), ID_SimpleStringProperties, &pProperties);  
pProperties->Add(L"filename", L"%windir%\\system32\\cscript.exe");  
pTask->Init(pProperties, nullptr);  
IStringProperties  
__interface IStringProperties : IUnknown  
{  
    HRESULT Get(LPCTSTR propertyName, [out] LPBSTR pPropValue);  
};  

이 인터페이스는 XML에서 제공되는 setter 요소 집합에 대한 간단한 액세스를 제공합니다. 이 인터페이스는 설정()->Properties()를 사용하여 페이지의 속성에 사용할 수 있습니다.

HRESULT Get(LPCTSTR propertyName, [out] LPBSTR pPropValue)

이 메서드는 단일 속성 값을 검색합니다. 표 47 및 표 48을 참조하세요.

표 47. IHRESULT Get 속성 값

매개 변수 설명
propertyName 읽을 속성의 이름
pPropValue exit에서 속성 값을 문자열로 포함합니다(이러한 속성이 없으면 이 값은 nullptr 이 됩니다.)

표 48. IHRESULT 속성 값 결과 가져오기

Hresult 설명
S_ok 속성 값이 검색됩니다.
E_INVALIDARG 제공한 이름의 속성이 없습니다.

ITaskManager 인터페이스

__interface ITaskManager : IUnknown  
{  
    HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback);  
    HRESULT SetFailMessage(LPCWSTR message);  

    HRESULT Start(void);  

    HRESULT GetTaskMessage(size_t index, LPBSTR message);  
    HRESULT GetResultType)(size_t index, LPBSTR type);  
    HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR value);  
    int GetSelectedIndex(void);  
    HRESULT Wait(DWORD waitMilliseconds);  
    size_t FailedCount(void);  
    size_t WarningCount(void);  
    size_t SucceedCount(void);  
    size_t RunningCount(void);  

    void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo);  
    void OnControlEvent(WORD eventId, WORD controlId);  
    void EnableButtons(BOOL enable);  
}  

이 인터페이스는 실행 전 페이지에서 작업을 실행하는 구성 요소인 TaskManager 구성 요소(ITaskManager.h의 ID_TaskManager )에 의해 구현됩니다. 대부분의 경우 수행되는 실행 전 페이지를 직접 사용하거나 고유한 페이지를 빌드하여 이 구성 요소가 대부분의 작업을 수행할 수 있도록 할 수 있습니다.

HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback)

다른 메서드를 호출하기 전에 이 메서드를 호출해야 합니다. TaskManager 구성 요소를 초기화합니다. 표 49를 참조하세요.

표 49. HRESULT Init

매개 변수 설명
pPageView 작업을 실행할 페이지에 대한 액세스를 제공합니다(이 페이지에는 다음 몇 가지 매개 변수에 설명된 특정 컨트롤 집합이 있어야 합니다.)
idListView 작업 목록과 해당 작업의 상태를 표시할 ListView 컨트롤의 컨트롤 ID입니다.
idMessage 선택한 작업에 대한 메시지를 표시하는 데 사용할 텍스트 상자의 컨트롤 ID입니다.
idRetryButton 작업을 다시 실행하기 위해 클릭할 수 있는 단추의 컨트롤 ID
pPageInfo 페이지의 XML 주위에 있는 래퍼(TaskManager 는 이 XML에서 실행할 작업 집합을 로드합니다.)
pCallback null일 수 있습니다(이 매개 변수가 null이 아닌 경우 TaskManager 는 작업을 시작할 때 Started 메서드를 호출하고 실행을 완료하는 각 작업에 대해 Finished 메서드를 호출합니다.)
HRESULT SetFailMessage(LPCWSTR 메시지)

이 메서드는 하나 이상의 작업이 실패할 경우 표시될 메시지를 설정합니다.

HRESULT Start(void)

이 메서드는 모든 작업을 시작합니다. 각 작업은 별도의 스레드에서 시작됩니다.

HRESULT GetTaskMessage(size_t 인덱스, LPBSTR 메시지)

이 메서드는 내부 전용입니다. 작업 목록의 인덱스를 기반으로 태스크에 대한 현재 메시지를 검색합니다.

HRESULT GetResultType)(size_t 인덱스, LPBSTR 형식)

이 메서드는 작업에 대한 현재 "type"을 검색합니다. 표 50에는 사용 가능한 형식이 표시됩니다.

표 50. HRESULT GetResultType

유형 설명
0 성공한 작업을 나타냅니다.
1 경고를 반환한 작업을 나타냅니다.
-1 실패한 작업을 나타냅니다.

작업의 종료 또는 오류 코드를 보고 작업의 ExitCodes XML 요소에서 <일치하는 항목을 찾아 형식을 검색합니다> .

HRESULT GetProperty(size_t 인덱스, LPCTSTR propertyName, LPBSTR 값)

이 메서드는 진행률 및 실행 전 페이지에서 BitmapFilename setter 속성을 검색하는 데 사용되므로 강조 표시된 작업에 대한 메시지 옆에 이미지를 표시할 수 있습니다. 즉, 태스크의 XML에 사용자 지정 setter를 추가한 다음, 이 메서드를 사용하여 검색할 수 있습니다.

int GetSelectedIndex(void)

이 메서드는 현재 선택한 작업의 인덱스를 검색합니다. 이 인덱스는 선택한 작업에 대해 표시할 작업에 대한 추가 정보( GetProperty 메서드 참조)를 검색하려는 경우에 유용합니다. 진행률 및 실행 전 페이지는 이 메서드를 사용하여 선택한 작업에 대한 이미지를 표시합니다.

HRESULT Wait(DWORD waitMilliseconds)

이 메서드는 주로 단위 테스트에 도움이 되므로 테스트는 단위 테스트가 종료되기 전에 작업이 완료되도록 할 수 있습니다. 일반적으로 이 메서드를 호출하지 않습니다. 모든 작업이 실행을 완료하거나 대기 시간이 경과한 경우 를 반환합니다.

size_t FailedCount(void)

이 메서드는 현재 실패로 표시된 작업 수를 반환합니다.

size_t WarningCount(void)

이 메서드는 현재 경고로 표시된 작업 수를 반환합니다.

size_t SucceedCount(void)

이 메서드는 현재 성공으로 표시된 작업 수를 반환합니다.

size_t RunningCount(void)

이 메서드는 현재 실행 중인 작업 수를 반환합니다.

void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo)

TaskManager가 필요한 이벤트를 처리할 수 있도록 페이지의 OnCommonControlEvent에서 이 메서드를 호출합니다.

void OnControlEvent(WORD eventId, WORD controlId)

TaskManager가 필요한 이벤트를 처리할 수 있도록 페이지의 OnControlEvent에서 이 메서드를 호출합니다.

void EnableButtons(BOOL enable)

이 메서드는 내부 전용입니다.

IWizardComponent 인터페이스

__interface IWizardComponent : IUnknown  
{  
    HRESULT SetContainer(IWizardPageContainer *pContainer);  
};  
개요

일반적으로 이 인터페이스를 직접 구현하지 않고 WizardComponent 템플릿 클래스를 통해 구현합니다. 구성 요소가 이 인터페이스를 구현하고 레지스트리에 클래스 팩터리를 등록한 경우 구성 요소는 생성될 때 IWizardPageContainer 인스턴스에 대한 포인터를 받습니다. 예를 들어 구성 요소에 필요할 수 있는 다른 구성 요소를 만들기 위한 로거 또는 레지스트리에 액세스할 수 있습니다.

IWizardDialogController 인터페이스

__interface IWizardDialogController : IUnknown  
{  
    void Initialize(ISettings *pSettings);  
    void InitPages(void);  
    void Start();  
    void Next();  
    void Finish();  
    void Previous();  
    int NumPages();  
    void Cancel();  

    HRESULT Focus(WizardButtons button);  
    HRESULT SetEnable(WizardButtons button, BOOL enable);  
    void ShowWarningMessage(LPCTSTR message);  
    void HideWarningMessage();  

    void ChangePage(size_t newIndex);  
    IUnknown *CurrentPage(void);  
    HRESULT GetCurrentTitle([out, retval] LPBSTR pDisplayName);  
};  

이 인터페이스는 내부 전용입니다.

IWizardDialogView 인터페이스

__interface IWizardDialogView : IUnknown  
{  
    HRESULT LoadBannerImage(LPCTSTR bannerFilename);  
    HRESULT LoadPage(LPCTSTR pageType, ISettingsProperties *pPageSettings, IWizardPageView **view);  
    HRESULT SetEnable(WizardButtons button, BOOL enable);  
    HRESULT Focus(WizardButtons button);  
    void EnableFinish(BOOL isFinish);  
    void Exit(int exitCode);  
    void ShowWarningMessage(LPCTSTR message);  
    void HideWarningMessage(void);  
    void SetTitle(LPCTSTR title);  
    void SetPageTitle(LPCTSTR title);  
    int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType);  
    HWND GetHwnd(void);  
    void UpdateFocus(void);  
};  

이 인터페이스는 내부 전용입니다.

IWizardPage 인터페이스

__interface IWizardPage : IUnknown  
{  
    HRESULT SetPageSettings(ISettingsProperties *pPageSettings);  
    HINSTANCE GetInstanceHandle(void);  
    int GetDialogResourceId(void);  
    void WindowCreated(IWizardPageView *pView, IWizardPageContainer *pContainer);  
    void WindowShown(void);  
    void WindowHidden(void);  

    HRESULT NextClicked(void);  
    void ControlEvent(WORD eventId, WORD controlId);  
    void CommonControlEvent(WORD controlId, LPNMHDR pInfo, LPBOOL pCancel);  
    void UnhandledEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);  
};  
개요

이 인터페이스는 WizardPageImpl에 의해 구현되므로 일반적으로 직접 구현할 필요가 없습니다. 마법사는 사용자 지정 페이지와 상호 작용할 때 이러한 모든 메서드를 호출합니다.

IWizardPageContainer 인터페이스

__interface IWizardPageContainer : IUnknown  
{  
    ILogger * Logger(void);  
    IPropertyBag * Properties(void);  
    HRESULT CreateInstance(LPCTSTR type, [out] IUnknown **ppInstance);  
    HRESULT GetService(REFIID iid, [out] IUnknown **ppInstance);  
    HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest);  
    HRESULT GotoPage(LPCTSTR pageName);  
    int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType);  
    BOOL InPreview(void);  
    HWND GetHwnd(void);  
};  
개요

이 인터페이스는 Container 메서드( WizardPageImpl에 의해 구현됨)를 통해 페이지에서 사용할 수 있으며 마법사의 다양한 서비스에 액세스할 수 있습니다.

ILogger * Logger(void)

이 메서드를 사용하여 로그 파일에 메시지를 씁니다. 예를 들면 다음과 같습니다.

Logger()->Verbose(s_component, L"Message for log file");  
IPropertyBag * Properties(void)

이 메서드는 UDI 마법사가 실행되는 동안에만 메모리에 있는 속성인 "메모리" 변수에 대한 액세스를 제공합니다. 이러한 속성은 $memoryVarName$ 구문을 사용하여 코드 또는 XML의 다른 페이지에서 사용할 수 있습니다.

HRESULT CreateInstance(LPCTSTR 형식, [out] IUnknown **ppInstance)

이 메서드를 사용하면 등록된 구성 요소의 새 인스턴스를 만들 수 있습니다. 그러나 템플릿 함수 CreateInstance는 강력한 형식이므로 사용하는 것이 좋습니다.

HRESULT GetService(REFIID iid, [out] IUnknown **ppInstance)

이 메서드를 사용하면 등록된 서비스를 검색할 수 있습니다. 그러나 IUnknown을 사용하는 대신 강력한 형식의 GetService 템플릿 함수를 호출하는 것이 좋습니다.

HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest)

이 메서드는 문자열 값 내의 변수 작업을 처리합니다. 표 51 및 표 52에 표시된 형식을 지원합니다.

표 51. HRESULT ReplaceVariables

형식 설명
$Name$ 메모리 변수의 값을 이 이름으로 바꿉니다(이름을 가진 메모리 변수가 없으면 "토큰"이 제거됩니다.)
%Name% 작업 순서 변수 또는 환경 변수. 순서는 다음과 같습니다.

1. 있는 경우 작업 순서 변수의 값을 사용합니다.
2. 환경 변수 값(있는 경우)을 사용합니다.
3. 그렇지 않으면 문자열에서 이 텍스트를 제거합니다.

표 52. HRESULT 매개 변수

매개 변수 설명
원본 % 변수의 $ 조합을 포함하거나 전혀 포함할 수 없는 입력 문자열입니다.
pDest 반환할 때 테이블 51에 따라 모든 토큰이 대체된 새 문자열을 포함합니다.
HRESULT GotoPage(LPCTSTR pageName)

이 메서드는 완전히 테스트되지 않았습니다. 아이디어는 .config XML 파일에 정의된 대로 페이지의 이름을 기반으로 특정 페이지로 직접 전환할 수 있다는 것입니다. 이 메서드를 호출하면 페이지에서 OnNextClicked가 무시됩니다 . 또한 이 메서드의 동작은 변경될 수 있으므로 사용자 고유의 위험에 사용합니다.

int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType)

이 메서드는 입력한 텍스트와 캡션이 있는 메시지 상자를 표시합니다. uType 매개 변수는 MessageBox Win32 함수에 제공할 수 있는 모든 값입니다.

BOOL InPreview(void)

이 메서드는 / preview 스위치를 제공하여 "미리 보기" 모드에서 마법사를 시작한 경우 TRUE를 반환합니다. 미리 보기 모드에서는 다음 단추를 사용하지 않도록 설정하지 않습니다. 이 메서드를 사용하면 미리 보기 모드의 코드를 무시할 수 있습니다. 예를 들어 페이지에 유효한 데이터가 없을 때 문제가 발생할 수 있습니다.

HWND GetHwnd(void)

이 메서드는 기본 대화 상자에 대한 HWND 를 반환합니다. 주의하여 이 메서드를 사용합니다. 일반적으로 UDI 마법사 애플리케이션 프로그래밍 인터페이스는 창 핸들로 직접 작업하지 않도록 설계되었습니다.

IWizardPageView 인터페이스

__interface IWizardPageView : IUnknown  
{  
    HRESULT GetControlWrapper(int itemId, DialogControlTypes controlType, IUnknown **ppControl);  
    HWND GetHwnd(void);  
    HWND GetControl(int itemId);  
    HRESULT Show (void);  
    HRESULT Hide(void);  
    HRESULT Focus(int itemId);  
    IWizardPage * Page(void);  
    IFormController * Form(void);  

    HRESULT FocusWizardButton(WizardButtons button);  
    HRESULT SetEnable(WizardButtons button, BOOL enable);  
    void ShowWarningMessage(LPCTSTR message);  
    void HideWarningMessage(void);  
};  

이 인터페이스는 View 메서드( WizardPageImpl에 의해 구현됨)를 통해 페이지의 코드에서 사용할 수 있습니다.

HRESULT GetControlWrapper(int itemId, DialogControlTypes controlType, IUnknown *ppControl)

UDI 마법사는 페이지의 컨트롤과 상호 작용하기 위한 외관인 래퍼를 사용합니다. 실제 컨트롤 대신 이러한 외관을 사용하면 테스트에서 모의 외관을 제공할 수 있으므로 페이지에 대한 테스트를 훨씬 쉽게 작성할 수 있습니다.

이 메서드를 직접 사용하는 대신 강력한 형식의 GetControlWrapper 템플릿 메서드를 사용하는 것이 좋습니다. 예를 들면 다음과 같습니다.

PComboBox m_pLanguagePackCombo;  
GetControlWrapper(View(), IDC_MY_COMBO, CONTROL_COMBO_BOX, &m_pCombo);  
HWND GetHwnd(void)

이 메서드는 페이지의 창 핸들을 반환합니다. 일반적으로 이 창 핸들에 액세스할 필요가 없습니다.

HWND GetControl(int itemId)

이 메서드를 호출하여 페이지의 컨트롤에 대한 창 핸들을 가져올 수 있습니다. GetControlWrapper 템플릿 함수를 호출하는 것이 좋습니다.

HRESULT Show(void)

이 메서드는 내부 전용입니다.

HRESULT Hide(void)

이 메서드는 내부 전용입니다.

HRESULT Focus(int itemId)

입력 포커스를 특정 컨트롤로 설정합니다.

IWizardPage * Page(void)

이 메서드는 내부 전용입니다.

IFormController * Form(void)

이 메서드는 내부 전용입니다.

HRESULT FocusWizardButton(WizardButtons 단추)

포커스를 마법사의 단추 중 하나로 설정합니다. WizardButtons 에는 BackButton과 NextButton 의 두 가지 값 있습니다.

HRESULT SetEnable(WizardButtons 단추, BOOL 사용)

마법사 단추 중 하나를 사용하거나 사용하지 않도록 설정하도록 요청합니다. 단추가 요청하는 상태와 일치하지 않을 수 있습니다. 예를 들어 /preview 스위치를 사용하여 UDI 마법사를 실행하는 경우 단추는 항상 사용하도록 설정됩니다. WizardButtons 에는 BackButton과 NextButton 의 두 가지 값 있습니다.

void ShowWarningMessage(LPCTSTR 메시지)

이 메서드는 페이지 콘텐츠 영역의 맨 아래에 경고 메시지를 표시합니다. 이 메시지는 원하는 텍스트일 수 있습니다.

void HideWarningMessage(void)

ShowWarningMessage 호출과 함께 표시한 경고 메시지를 숨깁니다.

IXmlDocument 인터페이스

__interface IXmlDocument : IUnknown  
    HRESULT Load(LPCTSTR filename);  
    HRESULT LoadXml(LPCTSTR xml);  
    HRESULT Save(LPCWSTR filename);  
    HRESULT GetParseErrorMessage(LPBSTR pMessage);  
    HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes);  
    HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode);  
    HRESULT AddSchema(LPCTSTR filename, LPCTSTR ns);  
    HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR name, LPCWSTR value);  
    HRESULT CreateNode(DOMNodeType type, LPCWSTR name, LPCWSTR ns, IXMLDOMNode **ppNode);  
};  
개요

이 인터페이스는 C++에서 XML 문서를 더 쉽게 사용할 수 있도록 설계된 외관인 ID_IXmlDocument 구성 요소에 의해 구현됩니다.

HRESULT Load(LPCTSTR 파일 이름)

이 메서드는 외부 파일에서 XML 문서를 로드합니다. 파일이 오류 없이 로드 되었거나 오류가 발생한 경우 S_FALSE 경우 S_OK 반환합니다. 오류가 발생하면 GetParseErrorMessage를 호출하여 오류 메시지를 가져올 수 있습니다.

HRESULT LoadXml(LPCTSTR xml)

이 메서드는 외부 파일 대신 문자열에서 XML 문서를 로드합니다. XML을 읽기 위한 원본 이외의 동작은 Load 메서드와 동일합니다.

HRESULT Save(LPCWSTR 파일 이름)

이 메서드는 메모리에 있는 XML 문서를 외부 파일에 저장합니다.

HRESULT GetParseErrorMessage(LPBSTR pMessage)

이 메서드는 XML 문서를 로드할 때 오류 메시지가 있는 새 문자열(있는 경우)을 반환합니다. 항상 S_OK 반환합니다.

HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes)

이 메서드를 사용하면 XPath 식을 사용하여 문서에서 노드 컬렉션을 검색할 수 있습니다. 항상 S_OK 반환합니다.

HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode)

이 메서드를 사용하면 XPath 식을 사용하여 문서에서 하나의 노드를 검색할 수 있습니다. 항상 S_OK 반환합니다.

HRESULT AddSchema(LPCTSTR 파일 이름, LPCTSTR ns)

이 메서드는 로드될 때 XML 문서의 스키마의 유효성을 검사하는 데 사용할 외부 스키마 파일의 이름을 추가합니다. 제공하는 네임스페이스는 테스트되지 않았지만 XPath 쿼리에서 사용할 수 있는 문자열입니다.

HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR 이름, LPCWSTR 값)

이 메서드는 XML 문서의 기존 노드에 새 특성을 추가합니다. 표 53을 참조하세요.

표 53. HRESULT AddAttribute

매개 변수 설명
pNode 특성을 추가할 노드
이름 새 특성의 이름
새 특성의 값입니다.
HRESULT CreateNode(DOMNodeType 형식, LPCWSTR 이름, LPCWSTR ns, IXMLDOMNode **ppNode)

새 노드를 만들려면 다음 메서드를 호출합니다.

Pointer<IXMLDOMNode> pNewChild  
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);  

새 노드를 만든 후에는 부모의 appendChild 메서드를 호출하여 다른 노드에 자식으로 추가할 수 있습니다.

도우미 함수

CreateInstance 템플릿 함수

HRESULT CreateInstance(IWizardPageContainer *pContainer, LPCTSTR type, I **ppObject)  

이 함수는 IWizardPageContainer.h에 정의되며 IWizardPageContainer-CreateInstance> 메서드를 통해 형식이 안전한 래퍼를 제공합니다. 예를 들면 다음과 같습니다.

CreateInstance<IDirectory>(Container(), ID_Directory, &pDirectory);  

이 코드는 해당 구성 요소의 IDirectory 인터페이스를 검색하는 새 ID_Directory 구성 요소를 만듭니다.

GetService 템플릿 함수

void GetService(IWizardPageContainer *pContainer, I **ppService)  

이 함수는 IWizardPageContainer.h에 정의되며 IWizardPageContainer-GetService> 메서드를 통해 형식이 안전한 래퍼를 제공합니다. 예를 들면 다음과 같습니다.

GetService<ITSVariableBag>(Container(), &pTsBag);  

이 함수는 ITSVariableBag 인터페이스를 지원하는 작업 순서 구성 요소를 검색합니다. ITSVariableBag의 경우 WizardPageImpl 클래스의 TSVariables 메서드를 대신 사용할 수 있습니다.

UDI 마법사 디자이너 구성 파일 스키마 참조

이 파일은 UDI 마법사 디자이너에서 사용합니다. 사용자 지정 마법사 페이지 편집기, 사용자 지정 작업 또는 사용자 지정 유효성 검사기를 포함할 수 있는 각 사용자 지정 .dll 파일에 대해 별도의 파일이 만들어집니다. 파일은 .config 종료하고 installation_folder\Bin\Config 폴더에 있어야 합니다(여기서 installation_folder MDT를 설치한 폴더임).

표 54에는 UDI 마법사 디자이너 구성 파일의 요소와 해당 설명이 나열되어 있습니다. DesignerConfig 요소는 이 참조의 루트 노드입니다.

표 54. UDI 마법사 디자이너 구성 파일 및 해당 설명의 요소

요소 이름 설명
DesignerConfig 다른 모든 요소의 루트를 지정합니다.
DesignerMappings Page요소 집합 그룹화
페이지 마법사 페이지의 구성 설정을 편집하는 데 사용되는 UDI 마법사 디자이너에 로드할 마법사 페이지 편집기를 지정합니다.
Param 부모 Task 또는 Validator 요소에 전달되고 UDI 마법사 구성 파일의 Setter 요소에 해당하는 매개 변수를 지정 합니다. 참고: 부모가 Task 또는 Validator 요소인 경우 이 요소의 특성은 다릅니다.
작업 작업 라이브러리 내에서 작업을 지정합니다.
TaskItem 작업에 전달되는 매개 변수 그룹을 지정합니다.
TaskLibrary 작업 요소 집합을 그룹 화합니다.
유효성 검사기 유효성 검사기 라이브러리 내에서 유효성 검사기를 지정합니다.
ValidatorLibrary 유효성 검사기 요소 집합 그룹화

DesignerConfig

이 요소는 다른 모든 요소의 루트를 지정합니다.

요소 정보

표 55는 DesignerConfig 요소에 대한 정보를 제공합니다.

표 55. DesignerConfig 요소 정보

Attribute(특성)
발생 횟수 하나: 이 요소가 필요합니다.
상위 요소 없음
내용 DesignerMappings, TaskLibrary, ValidatorLibrary
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시
<DesignerConfig>  
   + <TaskLibrary>  
   + <ValidatorLibrary>  
   + <DesignerMappings>  
</DesignerConfig>  

DesignerMappings

이 요소는 Page 요소 집합을 그룹화합니다.

요소 정보

표 56은 DesignerMappings 요소에 대한 정보를 제공합니다.

표 56. DesignerMappings 요소 정보

Attribute(특성)
발생 횟수 DesignerConfig 요소 내에 0개 또는 1개(이 UDI 마법사 디자이너 구성 파일에 해당하는 사용자 지정 마법사 페이지가 DLL에 없는 경우 이 요소는 선택 사항입니다.)
상위 요소 DesignerConfig
내용 페이지
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시
<DesignerConfig>  
   + <TaskLibrary>  
   + <ValidatorLibrary>  
   - <DesignerMappings>  
        <Page DLL="SharedPages.dll"  
           Description="Used to display text that describes the current stagegroup"  
           Type="Microsoft.SharedPages.WelcomePage"  
           DisplayName="Welcome"   
           Image="Welcome_188.png"  
           DesignerType="Microsoft.Enterprise.UDIDesigner.CoreModules.Views.WelcomePageView"  
           DesignerAssembly="Microsoft.Enterprise.UDIDesigner.CoreModules.dll"/>  
        <Page DLL="OSDRefreshWizard.dll"  
           Description="Captures or restores user state data"  
           Type="Microsoft.OSDRefresh.UserStatePage"  
           DisplayName="User Data"  
           Image="UserState_188.png"  
           DesignerType="Microsoft.Enterprise.UDIDesigner.CoreModules.Views.UserStatePageView"  
           DesignerAssembly="Microsoft.Enterprise.UDIDesigner.CoreModules.dll"/>  
        <Page DLL="OSDRefreshWizard.dll"  
           Description="Allows selecting the image to install, target drive, and whether to format"  
           Type="Microsoft.OSDRefresh.VolumePage"  
           DisplayName="Volume"  
           Image="Volume_188.png"  
           DesignerType="Microsoft.Enterprise.UDIDesigner.CoreModules.Views.VolumePageView"  
           DesignerAssembly="Microsoft.Enterprise.UDIDesigner.CoreModules.dll"/>  
     </DesignerMappings>  
</DesignerConfig>  

페이지

이 요소는 UDI 마법사 디자이너에 로드할 마법사 페이지 편집기를 지정합니다. 이 편집기는 마법사 페이지의 구성 설정을 편집하는 데 사용됩니다.

요소 정보

표 57은 Page 요소에 대한 정보를 제공합니다.

표 57. Page 요소 정보

Attribute(특성)
발생 횟수 DesignerMappings 요소에 정의된 각 마법사 페이지에 대해 하나 이상
상위 요소 DesignerMappings
내용 올바른 형식의 XML 콘텐츠
요소 특성

표 58에는 Page 요소의 특성과 각 요소에 대한 설명이 나열되어 있습니다.

표 58. Page 요소에 대한 특성 및 해당 값

특성 설명
설명 UDI 마법사 디자이너에 표시되는 매개 변수에 대한 정보를 제공하는 텍스트를 지정합니다.
DesignerAssembly 마법사 페이지 편집기와 연결된 .dll 파일의 이름을 지정합니다(.dll 파일은 installation_folder\Bin 폴더에 있어야 합니다(여기서 installation_folder MDT를 설치한 폴더임).
DesignerType DesignerAssembly 특성에 지정된 .dll 파일 내에서 마법사 페이지 편집기의 이름을 지정합니다(정규화된 Microsoft .NET 네임스페이스가 있는 마법사 페이지 편집기의 Microsoft .NET 형식입니다.)
DisplayName UDI 마법사 디자이너에 표시되는 페이지 편집기의 사용자 친화적인 이름을 지정합니다.
Dll 마법사 페이지와 연결된 .dll 파일의 이름을 지정합니다(.dll 파일은 installation_folder\Templates\Distribution\Tools\platform 폴더에 있어야 합니다(여기서 installation_folder MDT를 설치한 폴더이고 플랫폼 은 32비트 버전의 경우 x86 이거나 x64 는 64비트 버전용입니다.) 참고: DLL 프로세서 아키텍처가 설치된 MDT 프로세서 아키텍처와 일치하는지 확인합니다. 예를 들어 32비트 버전의 MDT를 설치한 경우 마법사 페이지에 32비트 DLL을 사용해야 합니다.
이미지 PNG(이식 가능한 네트워크 그래픽) 형식인 페이지의 이미지 이름을 지정합니다(.png 파일은 installation_folder\Bin\Images 폴더에 있어야 합니다(여기서 installation_folder MDT를 설치한 폴더임).
종류 마법사 페이지 편집기를 지정하고 사용자 지정 페이지를 등록할 때 사용된 명명된 와 일치해야 합니다.
설명

UDI 마법사 디자이너는 템플릿과 같은 Page 요소를 사용하여 새 마법사에 대한 초기 XML을 만듭니다. UDI 마법사 디자이너는 스키마 유효성 검사를 수행하여 Page 및 자식 요소의 형식이 유효한지 확인합니다. 이 요소는 UDI 마법사 페이지 형식과 UDI 마법사 디자이너가 사용자 지정 페이지 편집기를 사용하여 이 형식의 페이지를 편집하고 만드는 데 필요한 정보 간의 매핑을 제공합니다.

예시

없음

Param

이 요소는 부모 Task 또는 Validator 요소에 전달되고 UDI 마법사 구성 파일의 Setter 요소에 해당하는 매개 변수를 지정합니다.

참고

부모가 Task 또는 Validator 요소인 경우 이 요소의 특성은 다릅니다.

요소 정보

표 59는 Param 요소에 대한 정보를 제공합니다.

표 59. Param 요소 정보

Attribute(특성)
발생 횟수 TaskItem 또는 Validator 부모 요소에 대해 하나 이상
상위 요소 TaskItem, Validator
내용 올바른 형식의 XML 콘텐츠
요소 특성

표 60은 Param 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 60. Param 요소에 대한 특성 및 해당 값

특성 설명
설명 UDI 마법사 디자이너 참고: 이 특성은 Validator 요소에만 유효한 매개 변수에 대한 정보를 제공하는 텍스트를 지정합니다.
DisplayName UDI 마법사 디자이너의 적절한 UDI 마법사 페이지에 대해 표시되는 유효성 검사기 매개 변수의 사용자에게 친숙한 이름을 지정합니다(이 이름은 일반적으로 Name 특성보다 설명이 더 큽니다.) 참고: 이 특성은 Validator 요소에 대해서만 유효합니다.
이름 부모 요소에 따라 작업 또는 유효성 검사기에 전달되는 매개 변수의 이름을 지정합니다(이 특성은 UDI 마법사 구성 파일의 Setter 요소에서 Property 특성이 됩니다.) 참고: 이 매개 변수는 TaskItemValidator 부모 요소 모두에 사용됩니다.
설명

없음

예시

없음

작업

이 요소는 작업 라이브러리 내의 작업을 지정합니다.

요소 정보

표 61은 Task 요소에 대한 정보를 제공합니다.

표 61. Task 요소 정보

Attribute(특성)
발생 횟수 TaskLibrary 요소 내에서 하나 이상(TaskLibrary 요소가 지정된 경우 이 요소는 선택 사항이 아닙니다.)
상위 요소 TaskLibrary
내용 TaskItem
요소 특성

표 62는 Task 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 62. Task 요소에 대한 특성 및 해당 값

특성 설명
설명 UDI 마법사 디자이너에 표시되는 작업에 대한 정보를 제공하는 텍스트를 지정합니다.
Dll 작업과 연결된 .dll 파일의 이름을 지정합니다(.dll 파일은 installation_folder\Templates\Distribution\Tools\platform 폴더에 있어야 합니다. 여기서 installation_folder MDT를 설치한 폴더이고 플랫폼 은 32비트 버전의 경우 x86 이고 64비트 버전의 경우 x64 입니다.)
이름 적절한 UDI 마법사 페이지 및 UDI 마법사 디자이너에 표시되는 작업의 이름을 지정합니다.
종류 팩터리 레지스트리에 등록되고 .dll 파일 내에서 특정 작업을 호출하는 데 사용되는 작업 유형을 지정합니다.
설명

없음

예시

없음

TaskItem

이 요소는 작업에 전달되는 매개 변수 그룹을 지정합니다.

요소 정보

표 63은 TaskItem 요소에 대한 정보를 제공합니다.

표 63. TaskItem 요소 정보

Attribute(특성)
발생 횟수 Task 요소에 대해 하나 이상
상위 요소 작업
내용 Param
요소 특성

표 64는 TaskItem 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 64. TaskItem 요소에 대한 특성 및 해당 값

특성 설명
종류 UDI 마법사 구성 파일에서 만들 요소 형식의 를 지정합니다. 이 특성의 값에 해당하는 XML 요소가 만들어집니다. 예를 들어 이 특성의 값이 File이면 UDI 마법사 구성 파일에 File 요소가 만들어집니다.

현재 지원되는 유일한 값은 다음과 같습니다.

- 개의 Param 자식 요소(Name 특성이 Source로 설정된 Param 자식 요소와 Name 특성이 Dest로 설정된 다른 Param 자식 요소)가 필요한 파일
- 하나의 Param 자식 요소가 필요한 Setter
설명

없음

예시

없음

TaskLibrary

이 요소는 Task 요소 집합을 그룹화합니다.

요소 정보

표 65는 TaskLibrary 요소에 대한 정보를 제공합니다.

표 65. TaskLibrary 요소 정보

Attribute(특성)
발생 횟수 DesignerConfig 요소 내에 0개 또는 1개(이 UDI 마법사 디자이너 구성 파일에 해당하는 사용자 지정 작업이 DLL에 없는 경우 이 요소는 선택 사항입니다.)
상위 요소 DesignerConfig
내용 작업
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시
<DesignerConfig>  
   - <TaskLibrary>  
        +<Task DLL="" Description="Executes a process with the given command line." Type="Microsoft.Wizard.ShellExecuteTask" Name="Shell Execute Task">  
        +<Task DLL="OSDRefreshWizard.dll" Description="Discovers supported applications for install." Type="Microsoft.OSDRefresh.AppDiscoveryTask" Name="Application Discovery">  
        +<Task DLL="SharedPages.dll" Description="Check to ensure a wired network connection is available." Type="Microsoft.SharedPages.WiredNetworkTask" Name="Wired Network Check">  
        +<Task DLL="OSDRefreshWizard.dll" Description="Check to ensure power source is AC (not battery)." Type="Microsoft.OSDRefresh.ACPowerTask" Name="AC Power Check">  
        +<Task DLL="" Description="Check to ensure power source is AC (not battery)." Type="Microsoft.Wizard.CopyFilesTask" Name="Copy Files Task">  
     </TaskLibrary>  
   + <ValidatorLibrary>  
   + <DesignerMappings>  
</DesignerConfig>  

유효성 검사기

이 요소는 유효성 검사기 라이브러리 내에서 유효성 검사기를 지정합니다.

요소 정보

표 66은 Validator 요소에 대한 정보를 제공합니다.

표 66. Validator 요소 정보

Attribute(특성)
발생 횟수 ValidatorLibrary 요소 내에서 0개 이상(이 요소는 선택 사항입니다.)
상위 요소 ValidatorLibrary
내용 Param
요소 특성

표 67은 Validator 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 67. Validator 요소에 대한 특성 및 해당 값

특성 설명
설명 UDI 마법사 디자이너에 표시되는 유효성 검사기에 대한 정보를 제공하는 텍스트를 지정합니다.
DisplayName UDI 마법사 디자이너에 표시되는 유효성 검사기의 사용자 친화적인 이름을 지정합니다(이 이름은 일반적으로 Name 특성보다 설명이 더 큽니다.)
Dll 유효성 검사기와 연결된 .dll 파일의 이름을 지정합니다(.dll 파일은 installation_folder\Templates\Distribution\Tools\platform 폴더에 있어야 합니다. 여기서 installation_folder MDT를 설치한 폴더이고 플랫폼 은 32비트 버전의 경우 x86 이고 64비트 버전의 경우 x64 입니다.)
이름 적절한 UDI 마법사 페이지 및 UDI 마법사 디자이너에 표시되는 유효성 검사기의 이름을 지정합니다.
종류 레지스트리 요소에 등록되고 .dll 파일 내에서 특정 유효성 검사기를 호출하는 데 사용되는 유효성 검사기 유형을 지정합니다.
설명

없음

예시

없음

ValidatorLibrary

이 요소는 유효성 검사기 요소 집합을 그룹화합니다.

요소 정보

표 68에서는 ValidatorLibrary 요소에 대한 정보를 제공합니다.

표 68. ValidatorLibrary 요소 정보

Attribute(특성)
발생 횟수 DesignerConfig 요소 내에 0개 또는 1개(이 UDI 마법사 디자이너 구성 파일에 해당하는 사용자 지정 유효성 검사기가 DLL에 없는 경우 이 요소는 선택 사항입니다.)
상위 요소 DesignerConfig
내용 유효성 검사기
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시

<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL="" Description="필드에 텍스트 필요" Type="Microsoft. Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="특정 문자가 필드에 있는 것을 허용하지 않습니다" Type="Microsoft. Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Must follow a pre-defined pattern" Type="Microsoft. Wizard.Validation.RegEx" Name="NamedPattern"> +<Validator DLL="" Description="콘텐츠가 정규식과 일치하도록 요구" Type="Microsoft. Wizard.Validation.RegEx" Name="RegEx"></ValidatorLibrary> + <DesignerMappings></DesignerConfig>

UDI 마법사 디자이너 참조

컨트롤

UDI 마법사 디자이너에서 사용할 사용자 지정 마법사 페이지 편집기를 만드는 데 사용되는 컨트롤은 WPF UserControl 인스턴스입니다. 표 69에는 사용자 지정 마법사 페이지 편집기를 만드는 데 사용할 수 있는 컨트롤이 나열됩니다.

표 69. 사용자 지정 마법사 페이지 편집기를 만드는 데 사용할 수 있는 컨트롤

제어 설명
CollectionTControl 이 컨트롤은 Page 요소 내의 Data 요소에 저장된 데이터를 편집하는 데 사용됩니다.
FieldElementControl 이 컨트롤은 일반적으로 .xaml 페이지의 TextBox 컨트롤에 연결된 필드를 편집하는 데 사용됩니다.
SetterControl 이 컨트롤은 UDI 마법사 구성 파일에서 setter 요소의 값을 수정하는 데 사용됩니다.

CollectionTControl

이 컨트롤은 데이터를 편집하기 위한 다양한 기능을 제공합니다. 이 컨트롤을 사용하는 방법을 알아보는 가장 좋은 방법은 페이지의 Data 요소 아래에서 데이터를 편집하는 방법을 보여 주는 샘플을 보는 것입니다. 특히 이 샘플에서는 이 컨트롤에서 항목을 추가, 제거 및 편집하는 방법을 보여 있습니다.

FieldElementControl

일반적으로 .xaml 페이지의 TextBox 컨트롤에 연결된 필드를 편집하려면 이 컨트롤을 사용합니다.

예시

.xaml 파일에서 발췌한 다음 내용은 FieldElementControl 을 사용하여 자식 TextBox 컨트롤을 사용하여 마법사 페이지의 필드에 대한 기본값을 구성하는 방법을 보여 줍니다.

<Controls:FieldElementControl  
Width="450"  
Margin="0,5"  
FieldData="{Binding DataContext.Location, ElementName=ControlRoot}"  
HeaderText="Location Combo Box"  
InstructionText="Here you can configure the behavior of the location combo box."  
HideValidationTab="True">  

<TextBox Text="{Binding FieldData.DefaultValue,  
 UpdateSourceTrigger=PropertyChanged,  
 Mode=TwoWay}"/>  
</Controls:FieldElementControl>  
속성
FieldData

이 문자열 속성에는 FieldElementControl 을 필드의 기본 XML에 연결하기 위한 정보가 포함되어 있습니다. 페이지 편집기 인터페이스의 속성에 연결됩니다. .xaml 파일에서 발췌한 다음 발췌문은 FieldData 속성의 사용을 보여 줍니다.

FieldData="{Binding DataContext.Location, ElementName=ControlRoot}"  

이 발췌문에서 페이지 편집기 인터페이스를 ControlRoot 라고 하며 ElementName 매개 변수에 지정됩니다. 바인딩은 ControlRoot 페이지 편집기 인터페이스의 DataContext.Location 속성에 수행됩니다. DataContext 는 UDI 마법사 구성 파일 내의 Page 요소를 가리키는 뷰 모델입니다. Location 은 가능한 위치 목록을 반환하고 UDI 마법사 구성 파일 내의 Data 요소에 의해 정의된 뷰의 속성입니다. 각 위치는 UDI 마법사 구성 파일 내의 DataItem 요소에 의해 정의됩니다.

Headertext

이 문자열 속성을 사용하면 FieldElementControl 컨트롤에 대한 헤더를 지정할 수 있습니다. 머리글은 컨트롤의 제목 역할을 하며 컨트롤 바로 위에 표시되는 굵은 주황색 텍스트로 서식이 지정됩니다.

InstructionText

이 문자열 속성을 사용하면 FieldElementControl 컨트롤에 대한 정보 텍스트를 지정할 수 있습니다. 일반적으로 텍스트는 필드에 대한 간략한 설명을 제공하고 필드 구성이 해당 마법사 페이지에 미치는 영향을 설명하는 데 사용됩니다.

HideEnableButton

이 부울 속성을 사용하면 잠금 해제 됨과 잠금 (사용 또는 사용 안 함) 간에 상태를 변경하는 단추의 표시 여부를 제어할 수 있습니다. 다음으로 설정된 경우:

  • True이면 단추가 표시되지 않습니다.

  • False이면 단추가 표시됩니다(기본값).

HideDefaultTab

이 부울 속성을 사용하면 기본값을 설정하는 데 사용되는 컨트롤이 포함된 섹션의 표시 여부를 제어할 수 있습니다. 속성이 탭을 참조하지만 FieldElementControl 에는 탭이 없고 숨길 수 있는 섹션이 없습니다. 다음으로 설정된 경우:

  • True이면 섹션이 표시되지 않습니다.

  • False이면 섹션이 표시됩니다(기본값입니다.)

HideBorder

이 부울 속성을 사용하면 필드 컨트롤 주위의 테두리 표시 여부를 제어할 수 있습니다. 다음으로 설정된 경우:

  • True이면 테두리가 표시되지 않습니다.

  • False이면 테두리가 표시됩니다(기본값입니다.)

HideImage

이 부울 속성을 사용하면 FieldImageSource 속성이 구성하는 이미지의 표시 여부를 제어할 수 있습니다. 다음으로 설정된 경우:

  • True이면 이미지가 표시되지 않습니다.

  • False이면 이미지가 표시됩니다(기본값입니다.)

HideValidationTab

이 부울 속성을 사용하면 유효성 검사기 목록이 관리되는 섹션의 표시 여부를 제어할 수 있습니다. 속성이 탭을 참조하지만 FieldElementControl 에는 탭이 없고 숨길 수 있는 섹션이 없습니다. 다음으로 설정된 경우:

  • True이면 섹션이 표시되지 않습니다.

  • False이면 섹션이 표시됩니다(기본값입니다.)

HideSummaryTab

이 부울 속성을 사용하면 필드 요약 캡션을 구성하는 섹션의 표시 여부를 제어할 수 있습니다. 필드의 캡션 및 해당 값은 스테이지 흐름의 SummaryPage 마법사 페이지 형식에 표시됩니다. 속성이 탭을 참조하지만 FieldElementControl 에는 탭이 없고 숨길 수 있는 섹션이 없습니다. 다음으로 설정된 경우:

  • True이면 섹션이 표시되지 않습니다.

  • False이면 섹션이 표시됩니다(기본값입니다.)

HideTaskSequenceTab

이 부울 속성을 사용하면 필드에 해당하는 작업 순서 변수를 구성하는 섹션의 표시 여부를 제어할 수 있습니다. 속성이 탭을 참조하지만 FieldElementControl 에는 탭이 없고 숨길 수 있는 섹션이 없습니다. 다음으로 설정된 경우:

  • True이면 섹션이 표시되지 않습니다.

  • False이면 섹션이 표시됩니다(기본값입니다.)

SetterControl

이 컨트롤을 사용하여 UDI 마법사 구성 파일에서 Setter 요소의 값을 수정합니다. 이 컨트롤에는 setter 요소의 값을 수정하는 데 사용되는 자식 컨트롤이 포함되어 있습니다.

예시

.xaml 파일에서 발췌한 다음에서는 자식 TextBox 컨트롤을 사용하여 SetterControl을 사용하여 KeyLocationSetter라는 Setter 요소를 수정하는 방법을 보여 줍니다.

<Controls:SetterControl Margin="5"  
        Width="450"  
        HeaderText="Title text"  
        SetterData="{Binding KeyLocationSetter}"   
        InstructionText="What this means..."  
        HorizontalAlignment="Left">  

    <TextBox  
                   Margin="0,3"  
                   Text="{Binding SetterData.SetterValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  
    />  

</Controls:SetterControl>  
속성
SetterData

이를 setter에 연결하는 뷰 또는 뷰 모델의 속성에 바인딩해야 합니다. 이렇게 하는 것은 FieldElementControl에 설명된 대로 필드에 바인딩하는 방법과 유사합니다.

Headertext

이 속성을 사용하면 컨트롤의 머리글에 표시할 텍스트를 설정할 수 있습니다. 이 속성을 컨트롤의 제목으로 간주합니다. 기본적으로 굵은 주황색 텍스트로 표시됩니다.

InstructionText

이 속성을 헤더 아래에 표시할 텍스트로 설정합니다. 일반적으로 사용자 지정 편집기의 사용자에게 필드 동작을 수정할 시기와 이유를 알려주는 명령 텍스트입니다.

인터페이스

표 70에는 사용자 지정 마법사 페이지 편집기를 만드는 데 사용할 수 있는 인터페이스가 나열됩니다.

표 70. 사용자 지정 마법사 페이지 편집기를 만드는 데 사용할 수 있는 인터페이스

인터페이스 설명
IDataService 이 인터페이스를 사용하여 UDI 마법사 구성 파일의 데이터 요소에 필드를 연결합니다.
IMessageBoxService 이 인터페이스는 메시지 상자를 표시하는 데 사용할 수 있는 메서드에 대한 액세스를 제공합니다.

IDataService

이 인터페이스에는 여러 속성과 메서드가 포함되어 있지만 필요한 속성은 하나만 있습니다. 이 속성은 여기에 설명된 유일한 속성입니다.

종속성 주입을 사용하여 클래스에서 다음과 같은 코드를 사용하여 이 인터페이스에 대한 포인터를 가져올 수 있습니다.

[Dependency]  
public IDataService DataService { get; set; }  
속성

표 71에는 IDataService 인터페이스의 속성이 나열되어 있습니다.

표 71. IDataService 인터페이스의 속성

인터페이스 설명
CurrentPage 이 속성은 UDI 마법사 구성 파일에서 편집 중인 현재 페이지의 컨텍스트 아래에 있는 XML 요소, 특성 및 값에 대한 액세스를 제공합니다.
CurrentPage
XElement CurrentPage { get; set; }  

이 속성은 현재 페이지의 XML에 대한 액세스를 제공합니다. 이 속성을 설정해서는 안 되지만 페이지의 XML을 자유롭게 수정할 수 있습니다. 샘플 페이지 편집기는 XML을 수정하는 예제를 보여 줍니다. 사용자 지정 데이터가 있는 경우 주로 이 속성을 사용합니다. 필드 및 속성(setter)의 경우 모든 세부 정보를 처리하도록 미리 빌드된 컨트롤을 사용할 수 있습니다.

IMessageBoxService

이 인터페이스는 메시지 상자를 표시하는 데 사용할 수 있는 메서드에 대한 액세스를 제공합니다. 메시지 상자를 표시하기 위해 인터페이스가 필요한 이유가 궁금할 수 있습니다. 실제로는 디자이너 페이지에 대한 자동화된 테스트를 작성하는 데 도움이 되므로 Microsoft 코드에서 이 인터페이스를 사용합니다.

그러나 이러한 메서드를 사용하면 한 가지 유용한 이점이 있습니다. 대화 상자에는 항상 "소유자"가 UDI 마법사로 설정되므로 대화 상자가 주 창과 올바르게 그룹화됩니다.

종속성 주입을 사용하여 클래스에서 다음과 같은 코드를 사용하여 이 인터페이스에 대한 포인터를 가져올 수 있습니다.

[Dependency]  
public IMessageBoxService MessageBoxes { get; set; }  
메서드

표 72에는 IMessageBoxService 인터페이스에 대한 메서드가 나열됩니다.

표 72. IMessageBoxService 인터페이스에 대한 메서드

방법 설명
ShowMessageBox 이 오버로드된 메서드는 다음 멤버가 있는 메시지 상자를 표시하는 데 사용됩니다.

- ShowMessageBox(String message, String caption, MessageBoxImage 아이콘)
- ShowMessageBox(string message, string caption, MessageBoxButton 단추, MessageBoxImage 아이콘)
- ShowMessageBox(예외 예외)
ShowDialogWindow 이 메서드를 사용하여 새 대화 상자를 만듭니다.
ShowWizardWindow 탐색을 위한 다음뒤로 단추가 포함된 대화 상자 내에 사용자 지정 편집기를 표시하려면 이 메서드를 사용합니다.
ShowMessageBox

이 메서드는 사용자 지정 마법사 페이지 편집기의 자식인 메시지 상자를 표시합니다. 이 멤버가 오버로드됨: 표 73에는 멤버 목록과 각각에 대한 간략한 설명이 포함되어 있습니다. 각 멤버에 대한 전체 정보(구문, 사용법 및 예제 포함)는 각 멤버에 해당하는 섹션을 참조하세요.

표 73. ShowMessagBox 메서드에 대해 오버로드된 멤버

구성원 설명
ShowMessageBox(String message, String caption, MessageBoxImage 아이콘) 아이콘과 확인 단추가 있는 메시지 상자를 표시합니다.
ShowMessageBox(string message, string caption, MessageBoxButton 단추, MessageBoxImage 아이콘) 아이콘과 다양한 가능한 단추 조합이 있는 메시지 상자를 표시합니다.
ShowMessageBox(예외 예외) 예외에 대한 정보를 제공하고 확인 단추가 있는 메시지 상자를 표시합니다.
ShowMessageBox(String message, String caption, MessageBoxImage 아이콘)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);  

이 메서드는 확인 단추가 있는 메시지 상자를 표시합니다. 표 74를 참조하세요.

표 74. ShowMessageBox에 대한 매개 변수(문자열 메시지, 문자열 캡션, MessageBoxImage 아이콘) 메서드

매개 변수 설명
메시지 메시지 상자의 콘텐츠 영역에 표시할 메시지
캡션 대화 상자의 제목 표시줄에 표시할 텍스트
아이콘 메시지 상자에 표시할 아이콘의 유형
ShowMessageBox(string message, string caption, MessageBoxButton 단추, MessageBoxImage 아이콘)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);  

이 메서드는 표시하려는 단추 집합이 있는 메시지 상자를 표시하고 클릭한 단추를 보고합니다. 표 75를 참조하세요.

표 75. ShowMessageBox에 대한 매개 변수(문자열 메시지, 문자열 캡션, MessageBoxButton 단추, MessageBoxImage 아이콘) 메서드

매개 변수 설명
메시지 메시지 상자의 콘텐츠 영역에 표시할 메시지
캡션 대화 상자의 제목 표시줄에 표시할 텍스트
단추 표시할 단추
아이콘 메시지 상자에 표시할 아이콘의 유형
ShowMessageBox(예외 예외)
void ShowMessageBox(Exception exception);  

이 메서드는 예외에 대한 정보를 보고하는 메시지 상자를 표시합니다. 이 메시지 상자에는 단일 확인 단추가 있습니다. 표 76을 참조하세요.

표 76. ShowMessageBox(Exception exception) 메서드에 대한 매개 변수

매개 변수 설명
예외 보고하려는 예외(대화 상자에서 예외를 사용합니다.) 메시지를 내용으로 표시합니다.)
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);  

이 메서드는 viewType 매개 변수에 제공하는 텍스트인 새 대화 상자를 만듭니다. UDI 디자이너는 이 형식의 새 인스턴스를 만들고 확인취소 단추가 있는 대화 상자에 래핑합니다.

dialogPayload 매개 변수를 사용하여 컨트롤에 데이터를 전달합니다. SDK 디렉터리의 SampleEditor 솔루션에는 이 기능을 사용하는 방법의 예가 있습니다.

ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);  

이 메서드를 사용하면 탐색을 위해 다음뒤로 단추가 포함된 대화 상자 내에 사용자 지정 편집기를 표시할 수 있습니다. Microsoft 이 메서드를 사용하는 방법에 대한 샘플을 제공하지 않았습니다.

UDI 마법사 구성 파일 스키마 참조

이 파일은 UDI 마법사에서 사용되며 UDI 마법사 디자이너에 의해 구성됩니다. 이 파일은 다음을 구성하는 데 사용됩니다.

  • UDI 마법사에 표시되는 마법사 페이지

  • UDI 마법사의 마법사 페이지 시퀀스

  • 각 마법사 페이지의 필드에 대한 설정

  • UDI 마법사 디자이너에서 사용 가능한 StageGroups

  • UDI 마법사 디자이너의 각 배포 마법사 내에서 사용 가능한 단계

    77은 UDI 마법사 구성 파일의 요소와 해당 설명을 나열합니다. Wizard 요소는 이 참조의 루트 노드입니다.

표 77. UDI 마법사 구성 파일의 요소 및 해당 설명

요소 이름 설명
데이터 Page 요소 내의 개별 DataItem 요소를 그룹화하고 Name 특성으로 이름을 지정합니다.
Dataitem Page 요소 내의 개별 Setter 요소를 그룹화합니다. DataItem 요소 내에 하나 이상의 Data 요소를 포함하여 계층적 데이터를 만들 수 있습니다. 각 DataItem 요소는 개별 항목을 나타냅니다. 예를 들어 사용 가능한 드라이브 목록에는 표시 이름에 대한 DataItem 과 해당 드라이브 문자에 대한 다른 DataItem 요소가 있을 수 있습니다.
기본값 부모 Field 또는 RadioGroup 요소에 지정된 필드의 기본값을 지정합니다. 기본값은 이 요소에 의해 괄호로 묶인 값으로 설정됩니다.
Dll UDI 마법사 및 UDI 마법사 디자이너에서 로드 및 참조할 DLL을 지정합니다.
Dll 개별 DLL 요소를 그룹화합니다.
오류 작업에서 반환할 수 있는 가능한 오류 코드를 지정합니다. 오류 코드의 값은 태스크의 HRESULT 에서 반환되며 이 요소에 의해 트래핑되어 보다 구체적인 오류 정보를 제공합니다.
Exitcode 작업에 대한 가능한 종료 코드를 지정합니다. 종료 코드는 태스크에 필요한 반환 코드입니다. 가능한 각 종료 코드에 대해 ExitCode 요소를 만듭니다. 그렇지 않으면 Value 특성에 별표(*)를 지정하여 다른 ExitCode 요소에 나열되지 않은 반환 코드를 처리할 수 있습니다.
ExitCodes Task 요소 또는 Error 요소에 대한 ExitCodeError 요소 집합을 그룹화합니다.
필드 XML을 사용하여 사용자 지정을 제공하는 데 사용되는 Page 요소의 컨트롤 인스턴스를 지정합니다. 모든 컨트롤이 XML을 사용하여 사용자 지정을 허용하는 것은 아니며 Field 요소를 사용하는 컨트롤만 허용합니다.
필드 Page 요소 내의 개별 Field 요소를 그룹화합니다.
파일 Microsoft 사용하여 파일 복사 작업의 원본과 대상을 지정합니다. Wizard.CopyFilesTask 작업 유형입니다. 별도의 File 요소를 포함하면 단일 작업에서 둘 이상의 파일을 복사할 수 있습니다.
페이지 페이지의 인스턴스를 지정하고 페이지에 대한 모든 구성 설정을 포함합니다.
Pageref StageGroup 내의 스테이지 내 페이지 인스턴스에 대한 참조를 지정합니다.
페이지 개별 Page 요소를 그룹화합니다.
RadioGroup Field 요소 내의 라디오 단추 그룹을 지정합니다.
StageGroup 하나 이상의 스테이지 그룹을 지정합니다.
StageGroups UDI 마법사 구성 파일 내에서 스테이지 그룹 집합을 그룹화합니다.
Setter 속성 속성에 이름이 지정된 속성에 대한 값의 속성 설정을 지정합니다.
단계 StageGroup 내의 스테이지를 지정하고 하나 이상의 PageRef 요소를 포함합니다.
스타일 마법사 맨 위에 표시된 제목과 UDI 마법사에 표시된 배너 이미지를 포함하여 UDI 마법사 모양과 느낌을 구성하는 개별 setter 요소를 그룹화합니다.
작업 부모 Page 요소에 지정된 페이지에서 실행할 작업을 지정합니다.
태스크 Page 요소에 대한 작업 집합을 그룹화합니다.
유효성 검사기 부모 Field 요소에 지정된 필드 컨트롤의 유효성 검사기를 지정합니다.
마법사 다른 모든 요소의 루트를 지정합니다.

데이터

이 요소는 Page 요소 내의 개별 DataItem 요소를 그룹화하고 Name 특성으로 이름을 지정합니다.

요소 정보

표 78은 Data 요소에 대한 정보를 제공합니다.

표 78. 데이터 요소 정보

Attribute(특성)
발생 횟수 Page 요소 내에서 0개 이상(이 요소는 선택 사항입니다.)
상위 요소 Page, DataItem
내용 DataItem, Setter
요소 특성

표 79는 Data 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 79. 데이터 요소에 대한 특성 및 해당 값

특성 설명
이름 Data 요소의 이름을 지정합니다.
설명

Name 특성을 사용하면 코드에서 특정 데이터 집합을 검색할 수 있습니다.

예시

없음

Dataitem

이 요소는 Page 요소 내의 개별 Setter 요소를 그룹화합니다. DataItem 요소 내에 하나 이상의 Data 요소를 포함하여 계층적 데이터를 만들 수 있습니다. 각 DataItem 요소는 개별 항목을 나타냅니다. 예를 들어 사용 가능한 드라이브 목록에는 표시 이름에 대한 DataItem 과 해당 드라이브 문자에 대한 다른 DataItem 요소가 있을 수 있습니다.

요소 정보

표 80은 DataItem 요소에 대한 정보를 제공합니다.

표 80. DataItem 요소 정보

Attribute(특성)
발생 횟수 Data 요소 내에서 0개 이상(이 요소는 선택 사항입니다.)
상위 요소 데이터
내용 Data, Setter
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시

없음

기본

이 요소는 부모 Field 또는 RadioGroup 요소에 지정된 필드의 기본값을 지정합니다. 기본값은 이 요소가 대괄호로 묶은 값으로 설정됩니다.

요소 정보

표 81은 Default 요소에 대한 정보를 제공합니다.

표 81. 기본 요소 정보

Attribute(특성)
발생 횟수 Field 또는 RadioGroup 요소 내에서 0개 이상(이 요소는 선택 사항입니다.)
상위 요소 Field, RadioGroup
내용 올바른 형식의 XML 콘텐츠일 수 있지만 일반적으로 표준 텍스트입니다.
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시

다음 예제에서 TimeZone 필드의 기본값은 "태평양 표준시"로 설정됩니다.

<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">  
  <Default>Pacific Standard Time</Default>  

Dll

이 요소는 로드 및 참조할 UDI 마법사 및 UDI 마법사 디자이너에 대한 DLL을 지정합니다.

요소 정보

표 82는 DLL 요소에 대한 정보를 제공합니다.

표 82. DLL 요소 정보

Attribute(특성)
발생 횟수 DLL 요소 내에서 하나 이상
Parent 요소 Dll
내용 이 요소에 대해 허용되는 콘텐츠가 없습니다.
요소 특성

표 83은 DLL 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 83. DLL 요소에 대한 특성 및 해당 값

특성 설명
이름 참조할 UDI 마법사 및 UDI 마법사 디자이너의 DLL 이름을 지정합니다.
설명

없음

예시
<DLLs>  
  <DLL Name="OSDRefreshWizard.dll" />   
  <DLL Name="SharedPages.dll" />  
</DLLs>  

Dll

이 요소는 개별 DLL 요소를 그룹화합니다.

요소 정보

표 84는 DLL 요소에 대한 정보를 제공합니다.

표 84. DLL 요소 정보

Attribute(특성)
발생 횟수 하나
상위 요소 마법사
내용 Dll
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시
<DLLs>  
   <DLL Name="OSDRefreshWizard.dll" />  
   <DLL Name="SharedPages.dll" />   
</DLLs>  

오류

이 요소는 작업에서 반환할 수 있는 가능한 오류 코드를 지정합니다. 오류 코드의 값은 보다 구체적인 오류 정보를 제공하기 위해 작업의 HRESULT 에 의해 반환되고 트래핑됩니다.

요소 정보

표 85는 Error 요소에 대한 정보를 제공합니다.

표 85. Error 요소 정보

Attribute(특성)
발생 횟수 ExitCode 요소 내에서 0개 이상(이 요소는 선택 사항입니다.)
상위 요소 ExitCodes
내용 올바른 형식의 XML 콘텐츠
요소 특성

표 86에서는 Error 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 86. Error 요소 정보

특성 설명
상태 오류가 발생한 작업의 반환 상태를 지정합니다. 일반적으로 이 특성의 값은 Error로 설정됩니다. 이 값은 UDI 마법사의 마법사 페이지에 있는 상태 열에 표시됩니다.
Text 작업에서 발생한 오류 조건에 대한 설명 텍스트를 지정합니다.
종류 이 요소가 오류, 경고 또는 성공을 나타내는지 여부를 지정합니다. Type에 지정된 값은 ExitCodes 요소 내에서 고유해야 합니다. 다음은 이 요소에 대한 유효한 값입니다.

- 0. 요소는 성공을 나타냅니다.
- 1. 요소는 경고를 나타냅니다.
- -1. 요소는 오류를 나타냅니다.
태스크가 숫자 값으로 반환한 코드의 값을 지정합니다. 별표(*) 값을 지정하면 다른 Error 요소에 나열되지 않은 반환 코드의 기본 요소가 표시됩니다.
설명

없음

예시

없음

Exitcode

이 요소는 작업에 사용할 수 있는 종료 코드를 지정합니다. 종료 코드는 태스크에 필요한 반환 코드입니다. 가능한 각 종료 코드에 대해 ExitCode 요소를 만듭니다. 그렇지 않으면 Value 특성에 별표(*)를 지정하여 다른 ExitCode 요소에 나열되지 않은 반환 코드를 처리할 수 있습니다.

요소 정보

표 87에서는 ExitCode 요소에 대한 정보를 제공합니다.

표 87. ExitCode 요소 정보

Attribute(특성)
발생 횟수 ExitCodes 요소 내에서 0개 이상(이 요소는 선택 사항입니다.)
상위 요소 ExitCodes
내용 하나 이상의 ExitCode 요소 및 0개 이상의 Error 요소
요소 특성

표 88은 ExitCode 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 88. ExitCode 요소에 대한 특성 및 해당 값

Attribute(특성) 설명
상태 작업의 반환 상태를 지정합니다. 이 특성의 값은 UDI 마법사의 해당 마법사 페이지에 있는 상태 열에 표시됩니다. 작업에 의미 있는 이 특성에 대한 값을 사용할 수 있습니다. 다음은 이 특성에 사용되는 일반적인 값입니다.

-성공
-경고
-오류
Text 작업의 기존 코드에 대한 설명 텍스트를 지정합니다.
종류 이 요소가 오류, 경고 또는 성공을 나타내는지 여부를 지정합니다. 형식에 지정된 값은 ExitCodes 요소 내에서 고유해야 합니다. 다음은 이 요소에 대한 유효한 값입니다.

- 0. 요소는 성공을 나타냅니다.
- 1. 요소는 경고를 나타냅니다.
- -1. 요소는 오류를 나타냅니다.
태스크가 숫자 값으로 반환한 코드의 값을 지정합니다. 별표(*) 값을 지정하면 다른 ExitCode 요소에 나열되지 않은 반환 코드의 기본 요소가 표시됩니다.
설명

없음

예시

없음

ExitCodes

이 요소는 Task 또는 Error 요소에 대한 ExitCodeError 요소 집합을 그룹화합니다.

요소 정보

표 89는 ExitCodes 요소에 대한 정보를 제공합니다.

표 89. ExitCodes 요소 정보

Attribute(특성)
발생 횟수 각 Task 요소 내의 하나
상위 요소 작업
내용 오류, ExitCode
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시

없음

필드

이 요소는 XML을 사용하여 사용자 지정을 제공하는 데 사용되는 Page 요소의 컨트롤 인스턴스를 지정합니다. 모든 컨트롤이 XML을 사용하여 사용자 지정을 허용하는 것은 아니며 Field 요소를 사용하는 컨트롤만 허용합니다.

요소 정보

표 90은 Field 요소에 대한 정보를 제공합니다.

표 90. Field 요소 정보

Attribute(특성)
발생 횟수 Field 요소 내에서 0개 이상(이 요소는 선택 사항입니다.)
상위 요소 필드
내용 기본값, 유효성 검사기
요소 특성

표 91은 Field 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 91. Field 요소에 대한 특성 및 해당 값

특성 설명
Enabled 필드가 사용자 입력에 사용할 수 있는지 여부를 지정합니다(특성은 True 또는 False로 설정할 수 있습니다.)
이름 필드의 이름을 지정합니다.
요약 이 필드가 설정하는 값에 대한 요약 마법사 페이지에 표시되는 설명 텍스트를 지정합니다.
VarName 부모 Field 요소의 필드를 사용하여 읽거나 구성된 작업 순서 변수 이름을 지정합니다.
설명

이 요소는 0개 이상의 Default 요소와 0개 이상의 Validator 요소를 포함할 수 있습니다.

예시

없음

Fields

이 요소는 Page 요소 내의 개별 Field 요소를 그룹화합니다.

요소 정보

표 92는 Fields 요소에 대한 정보를 제공합니다.

표 92. Fields 요소 정보

Attribute(특성)
발생 횟수 Page 요소 내에서 0개 이상(이 요소는 선택 사항입니다.)
상위 요소 페이지
내용 Field, RadioGroup
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시

없음

File

이 요소는 Microsoft 사용하여 파일 복사 작업의 원본과 대상을 지정합니다. Wizard.CopyFilesTask 작업 유형입니다. 별도의 File 요소를 포함하면 단일 작업에서 둘 이상의 파일을 복사할 수 있습니다.

요소 정보

표 93은 File 요소에 대한 정보를 제공합니다.

표 93. 파일 요소 정보

Attribute(특성)
발생 횟수 작업 유형이 Microsoft 각 태스크에 대해 하나 이상입니다. Wizard.CopyFilesTask
상위 요소 작업
내용 없음
요소 특성

표 94는 File 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 94. File 요소에 대한 특성 및 해당 값

특성 설명
Dest 원본 특성에 지정된 파일의 대상 폴더에 대한 정규화된 경로 또는 상대 경로를 지정합니다. 환경 변수는 경로의 일부로 허용됩니다.
원본 Microsoft 원본 파일의 정규화된 경로 또는 상대 경로를 지정합니다. Wizard.CopyFilesTask 작업 유형 복사본. 이 특성은 단일 File 요소를 사용하여 여러 파일을 복사할 수 있도록 와일드카드 문자를 지원합니다. 환경 변수는 경로의 일부로 허용됩니다.
설명

없음

예시

없음

페이지

이 요소는 페이지의 인스턴스를 지정하고 페이지에 대한 모든 구성 설정을 포함합니다.

요소 정보

표 95는 Page 요소에 대한 정보를 제공합니다.

표 95. Page 요소 정보

Attribute(특성)
발생 횟수 Pages 요소 내에서 하나 이상
상위 요소 페이지
내용 데이터, 필드, Setter, 작업
요소 특성

표 96은 Page 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 96. Page 요소에 대한 특성 및 해당 값

특성 설명
DisplayName UDI 마법사 디자이너에 표시되는 마법사 페이지의 사용자에게 친숙한 이름을 지정합니다. 이 이름은 일반적으로 Name 특성보다 더 설명적입니다.
이름 UDI 마법사 디자이너에 표시되는 마법사 페이지의 이름을 지정합니다.
종류 DLL 내의 특정 마법사 페이지와 직접 관련된 마법사 페이지의 유형을 지정합니다.
설명

없음

예시

없음

Pageref

이 요소는 StageGroup 내의 Stage 내 페이지 인스턴스에 대한 참조를 지정합니다.

요소 정보

표 97은 PageRef 요소에 대한 정보를 제공합니다.

표 97. PageRef 요소 정보

Attribute(특성)
발생 횟수 Stage 요소 내에서 하나 이상
상위 요소 단계
내용 없음
요소 특성

표 98은 PageRef 요소의 특성을 나열하고 설명합니다.

표 98. PageRef 요소에 대한 특성 및 해당 값

특성 설명
페이지 StageGroup 내의 스테이지 내에 있는 페이지의 인스턴스를 지정합니다. 이 값을 Page 요소의 Name 특성으로 설정합니다.
설명

없음

예시

없음

페이지

이 요소는 개별 Page 요소를 그룹화합니다.

요소 정보

표 99는 Pages 요소에 대한 정보를 제공합니다.

표 99. Pages 요소 정보

Attribute(특성)
발생 횟수 하나
상위 요소 마법사
내용 페이지
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시
<Pages>  
   + <Page Name="WelcomePage" DisplayName="Welcome" Type="Microsoft.SharedPages.WelcomePage">  
   + <Page Name="ConfigScanPage" DisplayName="Deployment Readiness" Type="Microsoft.OSDRefresh.ConfigScanPage">  
   + <Page Name="ConfigScanBareMetal" DisplayName="Deployment Readiness" Type="Microsoft.OSDRefresh.ConfigScanPage">  
   + <Page Name="RebootPage" DisplayName="Reboot" Type="Microsoft.OSDRefresh.RebootPage">  
   + <Page Name="WelcomePageReplace" DisplayName="Welcome" Type="Microsoft.SharedPages.WelcomePage">  
   + <Page Name="VolumePage" DisplayName="Volume" Type="Microsoft.OSDRefresh.VolumePage">  
   + <Page Name="UserRestorePage" DisplayName="Select Target" Type="Microsoft.OSDRefresh.UserStatePage">  
   + <Page Name="ComputerPage" DisplayName="New Computer Details" Type="Microsoft.OSDRefresh.ComputerPage">  
   + <Page Name="AdminAccounts" DisplayName="Administrator Password" Type="Microsoft.SharedPages.AdminAccountsPage">  
   + <Page Name="UDAPage" DisplayName="User Device Affinity" Type="Microsoft.OSDRefresh.UDAPage">  
   + <Page Name="LanguagePage" DisplayName="Language" Type="Microsoft.OSDRefresh.LanguagePage">  
   + <Page Name="ApplicationPage" DisplayName="Install Programs" Type="Microsoft.OSDRefresh.ApplicationPage">  
     <Page Name="SummaryPage" DisplayName="Summary" Type="Microsoft.Shared.SummaryPage" />   
   + <Page Name="UserCapturePageOldPC" DisplayName="Select Target" Type="Microsoft.OSDRefresh.UserStatePage">  
   + <Page Name="ProgressPage" DisplayName="Capture Data" Type="Microsoft.OSDRefresh.ProgressPage">  
   + <Page Name="RebootAfterCapture" DisplayName="Reboot" Type="Microsoft.OSDRefresh.RebootPage">  
</Pages>  

RadioGroup

이 요소는 Field 요소에 있는 라디오 단추 그룹을 지정합니다.

요소 정보

표 100은 RadioGroup 요소에 대한 정보를 제공합니다.

표 100. RadioGroup 요소 정보

Attribute(특성)
발생 횟수 Fields 요소 내에서 0개 이상(이 요소는 선택 사항입니다.)
상위 요소 필드
내용 기본값
요소 특성

표 101은 RadioGroup 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 101. RadioGroup 요소에 대한 특성 및 해당 값

특성 설명
잠김 사용자 입력에 대해 라디오 단추 그룹을 사용할 수 있는지 여부를 지정합니다. 특성을 다음으로 설정할 수 있습니다.

- True입니다. 라디오 단추가 비활성화되고 사용자가 그룹에서 라디오 단추를 선택할 수 없게 지정합니다.
- False입니다. 라디오 단추를 사용하도록 설정하고 사용자가 그룹에서 라디오 단추를 선택할 수 있도록 지정합니다.
이름 라디오 옵션 그룹의 이름을 지정합니다.
설명

없음

예시

없음

StageGroup

이 요소는 배포 단계 그룹을 지정합니다.

요소 정보

표 102는 StageGroup 요소에 대한 정보를 제공합니다.

표 102. StageGroup 요소 정보

Attribute(특성)
발생 횟수 StageGroups 요소 내에서 하나 이상
상위 요소 StageGroups
내용 단계
요소 특성

표 103에는 StageGroup 요소의 특성과 특성에 대한 설명이 나열되어 있습니다.

표 103. StageGroup 요소에 대한 특성 및 해당 값

특성 설명
DisplayName UDI 마법사 디자이너에 표시되는 스테이지 그룹의 사용자에게 친숙한 이름을 지정합니다. 이 이름은 일반적으로 Name 특성보다 더 설명적입니다.
설명

없음

예시

없음

StageGroups

이 요소는 UDI 마법사 구성 파일 내에서 스테이지 그룹 집합을 그룹화합니다.

요소 정보

표 104는 StageGroups 요소에 대한 정보를 제공합니다.

표 104. StageGroups 요소 정보

Attribute(특성)
발생 횟수 Wizard 요소 내에서 0개 또는 1개
상위 요소 마법사
내용 StageGroup
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시

없음

Setter

이 요소는 속성 속성에 이름이 지정된 속성의 값에 대한 속성 설정을 지정합니다.

요소 정보

표 105는 Setter 요소에 대한 정보를 제공합니다.

표 105. Setter 요소 정보

Attribute(특성)
발생 횟수 각 부모 요소 내에서 0개 이상(이 요소는 선택 사항입니다.)
상위 요소 데이터, DataItem, 페이지, 스타일, 작업, 유효성 검사기
내용 Property 특성에 문자열 값을 포함합니다.
요소 특성

표 106에서는 Setter 요소의 특성을 나열하고 설명합니다.

표 106. Setter 요소에 대한 특성 및 해당 값

특성 설명
속성 설정되는 속성 이름을 지정합니다. 속성 이름은 이 특성이 대괄호로 묶인 값으로 설정됩니다.
설명

없음

예시

없음

단계

이 요소는 StageGroup 내의 Stage 를 지정하고 하나 이상의 PageRef 요소를 포함합니다.

요소 정보

표 107은 Stage 요소에 대한 정보를 제공합니다.

표 107. Stage 요소 정보

Attribute(특성)
발생 횟수 StageGroup 요소 내에서 하나 이상
상위 요소 StageGroup
내용 Pageref
요소 특성

표 108은 Stage 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 108. Stage 요소에 대한 특성 및 해당 값

특성 설명
DisplayName UDI 마법사 디자이너에 표시되는 마법사 페이지의 사용자에게 친숙한 이름을 지정합니다. 이 이름은 일반적으로 Name 특성보다 더 설명적입니다.
이름 스테이지의 이름을 지정합니다. 이 요소의 값은 /stage: name 명령줄 매개 변수를 사용하여 UDI 마법사를 시작할 때 사용됩니다.
설명

없음

예시

없음

스타일

이 요소는 마법사 맨 위에 표시된 제목과 UDI 마법사에 표시된 배너 이미지를 포함하여 UDI 마법사 모양과 느낌을 구성하는 개별 Setter 요소를 그룹화합니다.

요소 정보

표 109는 Style 요소에 대한 정보를 제공합니다.

표 109. Style 요소 정보

Attribute(특성)
발생 횟수 하나
상위 요소 마법사
내용 Setter
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시
<Style>  
  <Setter Property="bannerFilename">UDI_Wizard_Banner.bmp</Setter>   
  <Setter Property="title">Operating System Deployment (OSD) Refresh Wizard</Setter>   
</Style>  

작업

이 요소는 부모 Page 요소에 지정된 페이지에서 실행할 작업을 지정합니다.

요소 정보

표 110에서는 Task 요소에 대한 정보를 제공합니다.

표 110. Task 요소 정보

Attribute(특성)
발생 횟수 Tasks 요소 내에서 하나 이상
상위 요소 태스크
내용 ExitCodes, File, Setter
요소 특성

표 111은 Task 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 111. Task 요소에 대한 특성 및 해당 값

특성 설명
Dependson 작업이 다른 작업에 종속되는지 여부를 지정합니다. 이 특성의 값은 다른 Task 요소의 Name 특성으로 설정됩니다. 참고: 이 특성은 UDI 마법사 디자이너를 사용하여 구성할 수 없습니다. 그러나 .xml 파일을 직접 수정하여 Task 요소에 이 특성을 수동으로 추가할 수 있습니다.
DisplayName UDI 마법사 디자이너에 표시되는 작업의 사용자에게 친숙한 이름을 지정합니다. 이 이름은 일반적으로 Name 특성보다 더 설명적입니다.
이름 작업의 이름을 지정합니다. 이 이름은 고유해야 합니다.
유형 실행할 태스크의 작업 유형을 지정합니다. 이 형식은 태스크가 포함된 DLL에 정의되어 있습니다.
설명

없음

예시

없음

작업

이 요소는 Page 요소에 대한 작업 집합을 그룹화합니다.

요소 정보

표 112에서는 Tasks 요소에 대한 정보를 제공합니다.

표 112. Tasks 요소 정보

Attribute(특성)
발생 횟수 Page 요소 내에서 0개 또는 1개(이 요소는 선택 사항입니다.)
상위 요소 페이지
내용 작업
요소 특성

표 113에서는 Tasks 요소의 특성을 나열하고 각각에 대한 설명을 제공합니다.

표 113. Tasks 요소에 대한 특성 및 해당 값

특성 설명
NameTitle 적절한 마법사 페이지의 작업 이름이 포함된 열 맨 위에 표시되는 캡션을 지정합니다.
StatusTitle 적절한 마법사 페이지의 작업 상태가 포함된 열의 맨 위에 표시되는 캡션을 지정합니다.
설명

없음

예시

없음

유효성 검사기

이 요소는 부모 Field 요소에 지정된 필드 컨트롤에 대한 유효성 검사기를 지정합니다.

요소 정보

표 114에서는 Validator 요소에 대한 정보를 제공합니다.

표 114. Validator 요소 정보

Attribute(특성)
발생 횟수 Field 요소 내에서 0개 또는 1개
상위 요소 필드
내용 Setter
요소 특성

표 115에서는 Validator 요소의 특성을 나열하고 설명합니다.

표 115. Validator 요소에 대한 특성 및 해당 값

특성 설명
유형 유효성 검사기를 포함하는 DLL에 정의된 유효성 검사기의 형식을 지정합니다.
설명

없음

예시

없음

마법사

이 요소는 다른 모든 요소의 루트를 지정합니다.

요소 정보

표 116에서는 Wizard 요소에 대한 정보를 제공합니다.

표 116. Wizard 요소 정보

Attribute(특성)
발생 횟수 하나
상위 요소 없음
내용 DLL, Pages, StageGroups, Style
요소 특성

이 요소에는 특성이 없습니다.

설명

없음

예시
<Wizard>  
   + <DLLs>  
   + <Style>  
   + <Pages>  
   + <StageGroups>  
</Wizard>