ユーザー 駆動型インストール - 開発者ガイド

ユーザー駆動型インストール (UDI) は、Microsoft System Center 2012 R2 Configuration Managerのオペレーティング システム展開 (OSD) 機能を使用して、コンピューターへの windows クライアント オペレーティング システム (Windows 8.1 など) の展開を®簡略化®するのに役立ちます。 UDI は、Microsoft Deployment Toolkit (MDT) の一部です。

概要

通常、OSD 機能を使用してオペレーティング システムを展開する場合は、オペレーティング システムを展開するために必要なすべての情報を提供する必要があります。 情報は、構成ファイルまたはデータベース (CustomSettings.ini ファイルや MDT データベース [MDT DB]など) で構成されます。 デプロイを開始するには、すべての構成設定を指定する必要があります。

UDI には、展開を実行する直前に構成情報を提供できるウィザード駆動型インターフェイスが用意されています。 この動作により、一般的な OSD タスク シーケンスを作成し、展開時にコンピューター固有の情報を提供できます。これにより、展開プロセスの柔軟性が向上します。

ターゲット

このガイドは、UDI ウィザードのカスタム ウィザード ページと UDI ウィザード デザイナーのカスタム ウィザード ページ エディターを作成する開発者向けに作成されています。 このガイドでは、次を使用した Windows アプリケーションの開発に精通していることを前提としています。

  • カスタム ウィザード ページの作成に使用される C++

  • カスタム ウィザード ページ エディターの作成に使用されるMicrosoft .NET Framework

  • カスタム ウィザード ページ エディターの作成に使用されるWindows Presentation Foundation (WPF)

  • カスタム ウィザード ページ エディターの作成に使用される C#、C++、Microsoft Visual Basic® .NET など、WPF がサポートする言語

このガイドについて

このガイドでは、組織の UTI をカスタマイズするために必要なリファレンス情報を提供します。 このガイドでは、MDT (UDI を含む) のインストール、オペレーティング システムとアプリケーションを展開するための UDI の構成、UDI ウィザードを使用した展開の実行など、管理または運用に関するトピックについては説明しません。 これらのトピックの詳細については、MDT に含まれる「Microsoftデプロイ ツールキットの使用」の UDI トピックを参照してください。

UDI 開発の概要

UDI 開発では、UDI が提供する機能を拡張できます。 通常、UDI 展開プロセスで使用される追加情報を収集する場合は、UDI 開発が必要です。 この追加情報は通常、タスク シーケンス変数として保存され、タスク シーケンスは読み取Configuration Managerで UDI タスク シーケンスにステップインします。

UDI アーキテクチャ

UDI 開発の大まかな目標は、UDI ウィザードに表示できるカスタム ウィザード ページを作成することです。 カスタム ウィザード ページを作成することで、UDI の既存の機能を拡張して、組織のビジネス要件と技術要件を満たすことができます。 カスタム ウィザード ページは、UDI が提供するウィザード ページに加えて、または代わりに情報を収集します。

図 1 は、UDI ウィザード デザイナーと UDI ウィザードの関係を示しています。

図 1.UDI ウィザードと UDI ウィザード デザイナーの関係 図 1。 UDI ウィザードと UDI ウィザード デザイナーの関係

図 1. UDI ウィザードと UDI ウィザード デザイナーの関係

概念レベルでは、UDI 開発には次の作成が含まれます。

  • カスタム ウィザード ページ。 ウィザード ページが UDI ウィザードに表示され、展開プロセスを完了するために必要な情報が収集されます。 Visual Studio® で C++ を使用してウィザード ページMicrosoft作成します。 カスタム ウィザード ページは、UDI ウィザードが読み取る DLL として実装されます。 UDI ソフトウェア開発キット (SDK) には、カスタム ウィザード ページを作成する方法の例が含まれています。

  • カスタム ウィザード ページ エディター。 ウィザード ページ エディターを使用して、カスタム ウィザード ページの動作を構成します。 カスタム ウィザード ページ エディターは、UDI ウィザード デザイナーが読み取る DLL として実装されます。 ウィザード ページ エディターは、次を使用して作成します。

    • WPF バージョン 4.0

    • Microsoft Prism バージョン 4.0

    • Microsoft Unity Application Block (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 開発環境のハードウェアの前提条件は、使用している Visual Studio Microsoftエディションと同じハードウェア要件です。 これらの要件の詳細については、 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 ドキュメントの各エディションのシステム要件に関するページを参照してください。

  • バージョン 4.0 Microsoft .NET Framework (Visual Studio 2010 で必要)

  • C++ 言語 (UDI ウィザード ページの拡張で使用される言語)

  • UDI ウィザード デザイナー のウィザード ページ エディターを拡張するために使用される C#、Visual Basic .NET、C++/Common Language Infrastructure など、WPF がサポートするその他の言語

    注:

    UDI ウィザード デザイナー ウィザード ページ エディターのサンプル ソース コードは C# で記述されています。 サンプル ソース コードを使用する場合は、C# 言語をインストールします。

UDI 開発環境を構成する

その後、UDI 開発環境の前提条件が満たされたら、次の手順を実行して UDI 開発環境を構成します。

  1. Visual Studio 2010 をインストールします。

    C++ 言語と WPF でサポートされているその他の言語をインストールしてください。

    注:

    UDI ウィザード デザイナー エディター ページのサンプル ソース コードは C# で記述されています。 サンプル ソース コードを使用する場合は、C# 言語をインストールします。

    Visual Studio 2010 のインストールの詳細については、「 Visual Studio のインストール」を参照してください。

  2. MDT をインストールします。

    MDT のインストール方法の詳細については、「Microsoft Deployment Toolkit の使用」の MDT ドキュメントの「MDT へのインストールまたはアップグレード」セクションを参照してください。

  3. Windows エクスプローラーで、local_folderを作成 します ( ここで、local_folder は開発用コンピューター上のローカル ドライブ上にある任意のフォルダーです)。

  4. installation_folder\SDK フォルダーを local_folder にコピーします (ここでinstallation_folderは MDT をインストールしたフォルダーであり、local_folderは開発用コンピューター上のローカル ドライブにある任意のフォルダーです)。

    MDT が Program Files フォルダーにインストールされているため、管理者特権のアクセス許可なしではに書き込むことができないため、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 プロパティ ページ ] ダイアログ ボックスで、[ OK] をクリックします。

  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 をインストールしたフォルダーです)。 次のファイルを選択し、[OK] をクリック します

    • 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 をインストールしたフォルダーです)、[OK] をクリックします

    ヒント

    省略記号 (...) ボタンをクリックしてフォルダーを参照し、[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 ファイルが開き、詳細ウィンドウに Custom StageGroup が表示されます。

  18. 詳細ウィンドウで、[ 構成 ] タブをクリックします。

  19. [ 場所 ] ボックスの構成情報 (次を含む) を確認します。

    • [場所] ボックスを有効または無効にする [ロック解除] ボタン

    • [場所] ボックスに表示する既定値を入力する既定値ボックス

    • 概要ページに表示される表示名。サマリー ページに表示される情報の キャプションを入力 します

    • 可能な場所 の一覧を含む [場所] リスト ボックス

  20. UDI ウィザード デザイナーを閉じます。

  21. Visual Studio 2010 を閉じます。

UDI SDK の例の確認

開発を開始する前に、UDI SDK で提供されている例を確認してください。 このガイドの情報とサンプルのソース コードを使用して、独自の UDI カスタム ウィザード ページとウィザード ページ エディターを作成するのに役立ちます。

以下を確認して、UDI SDK の例を確認します。

SDK フォルダーの内容を確認する

UDI 開発環境の構成中に、MDT をインストールしたフォルダーから作成した別のフォルダーに SDK フォルダーをコピーしました。 表 1 に、SDK フォルダーのすぐ下にあるフォルダーを示し、それぞれの簡単な説明を示します。

表 1. UDI SDK のフォルダー

Folder このフォルダーには、
Includes 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 このメソッドは、ページのウィンドウが作成された後に 1 回呼び出されます。

このメソッドでは、ページを初めて初期化し、1 回だけ実行する必要があるコードを記述します。 たとえば、このメソッドを使用してフィールドを初期化したり、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 では、既定の構成ファイルは UDIWizard_Config.xml ファイルであり、構成用の MDT ファイル パッケージの Scripts フォルダーに存在します。

UDI ウィザードで使用される既定の構成ファイルをオーバーライドするには、UDI ウィザードのタスク シーケンス ステップを 変更して /definition パラメーターを使用します。 UDI ウィザードで使用される既定の構成ファイルのオーバーライドの詳細については、「UDI ウィザードで使用される構成ファイルをオーバーライドする」を参照してください。

Config.xml ファイルの最上位の要素は、

  • DLL 要素

  • Style 要素

  • Pages 要素

  • StageGroups 要素

    UDI ウィザード構成ファイルのスキーマとこれらの各要素の詳細については、「 UDI ウィザード構成ファイルスキーマ リファレンス」を参照してください

    UDI ウィザードは、読み込む.dll ファイルを探して DLL 要素をスキャンします。 この例では、SamplePage.dll と SharedPages.dll の 2 つの.dll ファイルが一覧表示されています。 これらの.dll ファイルは、OSDSetupWizard.exeと同じフォルダー (Tools\platform フォルダー ) に存在する必要があります ( プラットフォーム は 32 ビット バージョンの場合は x86、64 ビット バージョンの場合は x64)。

    UDI ウィザードは、定義されている ページ を探して Pages 要素をスキャンします。 この例では、 CustomSummaryPage の 2 つのページが定義されています。 Page 要素の Type 属性は、PageClassIDs.h ファイルで定義され、カスタム ページの型を一意に定義します。

    この例では、定義された型がMicrosoftされています。SamplePage.LocationPage。 カスタム ページの場合は、将来作成する可能性のある他のページと競合する可能性を回避するために、次に置き換えます。

  • Microsoftの場所にある組織名。

  • SamplePage の場所にあるプロジェクト名。

  • LocationPage の場所にあるカスタム ウィザード のページ名。

手順 2: UDI ウィザードがカスタム ウィザード ページの DLL を読み込む

UDI ウィザードは、DLL を読み込むときに RegisterFactories 関数を呼び出します。これは、.dll ファイルに実装する必要があります。 この例では、この関数は dllmain.ccp ファイルに実装されています。 作成する各ウィザード ページでは、 RegisterFactories 関数を実装する必要があります。

RegisterFactories 関数は、ウィザード ページのファクトリ クラスを UDI ウィザードのクラス ファクトリ レジストリに登録するために使用されます。 クラス ファクトリ は、別のクラスのインスタンスを作成できるクラスです。 RegisterFactories 関数はファクトリ クラスの新しいインスタンスを作成し、そのクラスを UDI ウィザードのクラス ファクトリ レジストリに渡します。これにより、そのファクトリ クラスをウィザードで使用できるようになります。 UDI ウィザードは、カスタム ウィザード ページの Page 要素の Type 属性と一致する ID で登録されているファクトリ クラスを検索します。

この例では、ID は PageClassIds.h ファイルで Microsoft としてID_Locationとして定義されています。SamplePage.LocationPage。これは、Config.xml ファイル内の Page 要素の Type 属性と一致します。 ID_Location は、dllmain.ccp ファイルに実装されている RegisterFactories 関数のパラメーターとして渡されます。

Register_name 関数テンプレートを使用して関数を作成すると、新しいファクトリ インスタンスの作成を簡略化し、新しく作成したインスタンスを登録できます。 Register 関数テンプレートを使用して指定する 名前 の値は 、iClassFactory インターフェイスを実装する必要があります。 ClassFactoryImpl クラスは、クラス ファクトリを実装するためのほとんどの詳細を処理します。

RegisterFactories 関数を使用して、タスク型とバリデーター型を登録することもできます。 詳細については、次のトピックを参照してください。

注:

この例では、1 つのカスタム ウィザード ページのみを含み、登録します。 この例にはカスタム タスクやバリデーターが含まれていないため、カスタム タスクやバリデーターは登録されません。

手順 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 メソッドに加えて、AddRadioGroup メソッドと AddToGroup メソッドを使用して、他のコントロールと動作をサポートすることもできます。

      注:

      InitFields メソッドを呼び出す前に、AddFieldAddRadioGroup、または 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 ファイル) に保存されます。 ただし、必要に応じて、独自の個別の構成ファイルを作成することもできます。 別の構成ファイルを使用する例の 1 つは、 アプリケーション検出 タスクと ApplicationPage ウィザード ページの種類で使用される UDIWizard_Config.xml.app ファイルです。

UDI ウィザード デザイナーを使用して管理できる一般的な構成設定の一覧を次に示します。

  • フィールド。 フィールドを使用すると、ユーザーは入力を提供できます。 フィールドは、各フィールドの構成設定を含む UDI ウィザード構成ファイル (UDIWizard_Config.xml) の フィールド 要素として表示されます。 対応するウィザード ページ エディターでは、 FieldElementControl を使用してフィールドのフィールド構成設定を編集するためのメソッドを提供する必要があります。

  • Properties。 Setters は、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 は、UDIDesigner.exe ファイルと同じフォルダー ( install_folder\Bin フォルダー) に配置する必要があります ( ここで、install_folder は MDT がインストールされているフォルダーの名前です)。

  • DesignerType。 この属性は、WPF ユーザー コントロールを含むクラスの .NET 型名Microsoftです。

  • 。 この属性を使用して、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) の要素と属性の関係を確認できます。

たとえば、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。 このデータ バインド プロパティは、ユーザーがリストから項目を選択したときにアクティブ化されます。 このプロパティは、ビュー モデルの CurrentLocation プロパティに関連付けられています。これは LocationPageEditorViewModel.cs ファイルにあり、 CollectionTControl コントロールが既存の項目を編集または削除するときに選択した項目を渡すために使用されます。

  • AddItemAction。 このアクションは、ユーザーがコンテキスト依存メニューまたはリボンの対応するボタンから [項目の追加] オプションをクリックしたときに実行されます。 ビュー モデルには、 AddLocationAction オブジェクトを返すプロパティへのデータ バインディングがあります。 このオブジェクトは、LocationPageEditorViewModel.cs ファイルにある AddLocationCallback メソッドであり、AddEditLocationView.xaml ファイルにダイアログ ボックスを表示します。

  • EditItemAction。 このアクションは、ユーザーがコンテキスト依存メニューの [アイテムの編集] オプションをクリックしたときに実行されます。 EditLocationAction オブジェクトを返すビュー モデル内の プロパティへのデータ バインディングがあります。 このオブジェクトは、LocationPageEditorViewModel.cs ファイルにある EditLocationCallback メソッドであり、AddEditLocationView.xaml ファイルにダイアログ ボックスを表示します。

  • RemoveAction。 このアクションは、ユーザーがコンテキスト依存メニューから [アイテムの削除 ] オプションをクリックしたときに実行されます。 RemoveAction オブジェクトを返すビュー モデル内のプロパティへのデータ バインディングがあります。 このオブジェクトは、LocationPageEditorViewModel.cs ファイルにある EditLocationCallback メソッドであり、場所の削除を確認するメッセージを示します。

場所の追加または編集のダイアログ ボックスを確認する

場所の一覧に新しい場所を追加したり、既存の場所を編集したりすると、AddEditLocationView.xaml ファイル内のメッセージが表示されます。 メッセージは、LocationPageEditorViewModel.cs ファイルの ShowDialogWindow ウィンドウ メソッドを使用して表示されます。

AddEditLocationView.xaml ファイルの UI は、次で構成されます。

  • DialogFrame という名前のダイアログ フレーム。これには次の要素が含まれます。

    • ダイアログ フレームの DialogTitle 属性を使用して構成するタイトル。

    • [OK] ボタン。 [承認済み] プロパティの戻り状態を True に設定します (戻り状態は、LocationPageEditorViewModel.cs ファイルの AddLocationCallback メソッドでチェックされ、ユーザーが [OK] をクリックしたかどうかを判断します)。

    • [キャンセル] ボタン。Approved プロパティの戻り状態を False に設定します (戻り状態は、LocationPageEditorViewModel.cs ファイルの AddLocationCallback メソッドでチェックされ、ユーザーが Cancel をクリックしたかどうかを判断します)。

  • 次を含む WPF 要素。

    • Content 属性を使用して構成するラベル

    • テキスト ボックス。これは、UDI 構成ファイル (例では Config.xml ファイル) の Location という名前の Data 要素にバインドされています。

構成情報の管理に使用するコードを確認する

カスタム ウィザード ページの構成情報は、次の UDI ウィザード構成ファイルに格納されます。

  • UDI SDK で提供される例のConfig.xml ファイル (このファイルには、例の構成設定のみが含まれています)。

  • UDIWizard_Config.xml MDT で提供されるファイルで、 installation_folder\Templates\Distribution\Scripts フォルダー ( ここで、installation_folder は MDT をインストールしたフォルダー) に格納されます。このファイルには、組み込みウィザードのすべてのページとステージの構成設定が含まれています

    SampleEditor の例では、 Locations ルーチンは構成情報の管理に役立ち、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 プレインストール環境 (Windows PE) のプロセッサ プラットフォーム) であることを確認します。 UDI ウィザードは、次のコマンドで実行できます。

    • ターゲット コンピューター上の既存のオペレーティング システム。 ウィザード ページの 32 ビット バージョンは、32 ビットまたは 64 ビットの Windows オペレーティング システムで実行できます。 ただし、64 ビット版の Windows オペレーティング システムでは、64 ビット バージョンのウィザード ページのみを実行できます。

    • ターゲット コンピューター上の Windows PE。 Windows PE では、64 ビット バージョンの Windows PE での 32 ビット アプリケーションの実行はサポートされていません。 そのため、使用する予定の Windows PE のプロセッサ アーキテクチャごとに、ウィザード ページのバージョンを作成する必要があります。

  8. カスタム ウィザード ページの DLL を installation_folder\Templates\Distribution\Tools\ platform フォルダーにコピーします ( ここで、installation_folder は MDT をインストールしたフォルダーで、 プラットフォーム は 32 ビット バージョンの場合は x86x64 は 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 です。 DLL を UDI ウィザード デザイナー タスク ライブラリに登録するには、UDI ウィザード デザイナー構成ファイル (.config ファイル) を作成し、 installation_folder\Bin\Config フォルダー ( installation_folder は MDT をインストールしたフォルダー) に配置します。

注:

同じ.dll ファイル内にウィザード ページ、タスク、および検証コントロールを含む DLL を作成できます。 また、DLL 内のウィザード ページ、タスク、検証コントロールの構成設定を含む UDI ウィザード デザイナーの構成ファイル (.config) を 1 つ作成することもできます。

カスタム 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>  
    

    注:

    すべての Task 要素に BitmapFilename パラメーターを含める必要があります。 タスクに必要なその他のすべてのパラメーターを指定します。 たとえば、前の抜粋では、ログ パラメーターを使用して、 ログ ファイルの場所のパラメーターを指定します。

  5. 前の手順で作成した UDI ウィザード デザイナー構成ファイルを installation_folder\Bin\Config フォルダーにコピーします ( ここで、installation_folder は MDT をインストールしたフォルダーです)。

  6. カスタム タスクの DLL を installation_folder\Templates\Distribution\Tools\ プラットフォーム フォルダーにコピーします ( ここで、installation_folder は MDT をインストールしたフォルダーで、 プラットフォーム は 32 ビット バージョンの 場合は x86x64 は 64 ビット バージョン用です)。

カスタム UDI バリデーターの作成

UDI バリデーター は、 IValidator インターフェイスを実装する C++ で記述された DLL です。 UDI ウィザード デザイナーの構成ファイル (.config ファイル) を作成し、installation_folder\Bin\Config フォルダー (installation_folder MDT をインストールしたフォルダー) に配置することで、DLL を UDI ウィザード デザイナー検証コントロール ライブラリに登録します。

カスタム 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 ビット バージョンの 場合は x86x64 は 64 ビット バージョン用です)。

UDI ウィザード リファレンス

ウィザード ページ コンポーネント

いくつかの事前構築済みコンポーネントのいずれかを使用して、カスタム ページをビルドできます。

コンポーネント インスタンスの作成

UDI ウィザードでは、クラス ファクトリを使用して、オブジェクトの新しいインスタンスを作成します。 これらのファクトリは、ファクトリのキーとして文字列を使用して、ファクトリ レジストリに登録されます。 たとえば、WmiRepository コンポーネントは文字列 "Microsoft によって識別されます。Wizard.WmiRepository"。IWmiRepository ヘッダー ファイルでID_WmiRepositoryとして使用できます。

WizardPageImpl のサブクラスとしてページを記述したと仮定すると、次のように WmiRepoistory の新しいインスタンスを作成できます。

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

CreateInstance 関数は、コンポーネントの新しいインスタンスを作成するための型セーフなテンプレート関数です。 PWmiRepository はスマート ポインターであるため、参照カウントが処理されます。

作成可能なコンポーネント

レジストリに登録できる一連のコンポーネントがあります。 コンポーネントの最初のセットは、メインの UDI ウィザード実行可能ファイルによって提供されるため、常に登録されます。 他の 2 つのコンポーネント セットは、"省略可能" DLL で提供されます。 これらのコンポーネントを使用できるようにするには、.config XML ファイルの DLL セクションに DLL 一覧表示する必要があります。 コードには、特定のコンポーネントを含む実行可能ファイルを知る必要はありません。

ファクトリ レジストリ (OSDSetupWizard で定義) に登録されているコンポーネントのコンポーネント ID (コンポーネント名は ID と同じですが、初期 ID_なし) の一覧を表 3 に示します。

表 3. コンポーネント ID

ID 説明
ID_ACPowerTask (ITask、IWizardComponent)コンピューターがバッテリのみで実行されていないことを保証するプレフライト タスク
ID_AppDiscoveryTask (ITask、IWizardComponent)コンピューターにインストールされているソフトウェア項目を検出するための特殊なタスク
ID_BackgroundTask (IBackgroundTaskIWizardComponent)別のスレッドでタスクを実行するために使用できます
ID_CopyFilesTask (ITaskIWizardComponent)1 つ以上のファイルをコピーするタスク
ID_FormController (IFormController)ページが独自のインスタンスを受け取るので、インスタンスを自分で作成する必要はありません
ID_InvalidCharactersValidator (IValidator)バリデーターに指定されたリストの文字がテキスト フィールドに含まれていることを確認します
ID_Logger (ILogger)ページが共有インスタンスへのポインターを受け取るので、インスタンスを自分で作成する必要はありません。
ID_NonEmptyValidator (IValidator)フィールドが空でないことを保証するバリデーター
ID_PasswordValidator (IValidator)2 つのテキスト フィールドが同じコンテンツを持たないようにする検証コントロール
ID_Regex (IRegEx)正規表現を評価し、一致を検索します
ID_RegExValidator (IValidator)正規表現または既知のパターンに対して検証する検証コントロール
ID_SimpleStringProperties (IStringPropertiesISimpleStringProperties)XML を使用せずにタスクにプロパティを送信する簡単な方法を提供します
ID_ShellExecuteTask (ITaskIWizardComponent)外部プログラムを実行する
ID_SummaryBag (ISummaryBag)Form メソッドを使用して、ページから間接的に使用できます
ID_TaskManager (ITaskManagerIBackgroundCallbackIWizardComponent)一連のタスクと UI の実行を管理します
ID_WmiRepository (IWmiRepositoryIWizardComponent)Windows Management Instrumentation (WMI) クエリを実行できます
ID_IXmlDocument (IXmlDocument)XML ドキュメントを読み書きするためのファサードを提供します

定義されたOSDRefreshWizard.dll、共有ページ、およびその他の制御コンポーネントを表 4 および表 5 に示します。

表 4. ディレクトリ コントロール

ID 説明
ID_Directory (IDirectory)ファイル システムからディレクトリ情報を取得するためのファサード

表 5。 定義されたSharedPages.dll

ID 説明
ID_ADHelper (IADHelper)Active Directory® Domain Services (AD DS) の限られた機能セットのファサードを提供します
ID_CpuInfo (ICpuInfo)CPU が 32 ビットか 64 ビットかを決定します
ID_DomainJoinValidator (IDomainJoinValidator)一連の資格情報がドメインへの参加を許可されているかどうかを確認するためのいくつかの方法があります
ID_DriveList (IDriveListIBindableListIWizardComponent)WMI を使用してコンピューター上のドライブの一覧を取得します
ID_WiredNetworkTask (ITask)(ワイヤレスではなく) ハードワイヤード (有線) ネットワーク アダプターを使用してネットワークに接続されているかどうかを確認するタスク

コントロール コンポーネント

ページ上のコントロールを操作するには、 GetControlWrapper テンプレート関数を使用します。この関数を使用すると、表 6 に記載されているコンポーネントの種類のいずれかにアクセスできます。

表 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 は ID_InvalidCharactersValidator (IValidator.h で定義) され、テキスト値は "Microsoft。Wizard.Validation.InvalidChars"

この検証コントロールは、InvalidChars という名前の単一のプロパティ (.config ファイル内の Setter 要素) を検索します。これは、許可されていない文字の一覧です。 テキスト ボックス内の文字をチェックします。テキストにこのリストの文字が含まれている場合、コンポーネントはエラーを報告します。

NonEmptyValidator コンポーネント

これは、ページに含めることができるバリデーターの一種です。 ID はID_NonEmptyValidator (IValidator.h で定義) され、テキスト値は "Microsoft。Wizard.Validation.NonEmpty"

この検証コントロールは、テキスト ボックス (または IStaticText をサポートする他のコントロール) に空の文字列値がある場合にエラーを報告します。

PasswordValidator コンポーネント

これは、ページに含めることができるバリデーターの一種です。 ID は ID_PasswordValidator (IValidator.h で定義) され、テキスト値は "Microsoft。Wizard.Validation.Password"

このバリデーターは、2 つの異なるテキスト コントロール ( IStaticText をサポートするコントロール) で動作し、同じ値が含まれていない場合にエラーを報告します。 つまり、[パスワード] テキスト ボックスと [パスワード確認 ] テキスト ボックスが一致しない場合は失敗します。

このバリデーターには 2 つのコントロールが必要であるため、他のバリデーターよりも多くのセットアップが必要です。 セットアップは次のようになります。

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);  

まず、 パスワードの確認 コントロールをパスワード コントロールの "子" として定義します。 そうすることで、フォーム コントローラーが [パスワード ] コントロールを無効にした場合は、[ パスワードの確認 ] コントロールも無効になります。 次に、フォームにパスワード 検証コントロールを追加します。 最後に、パスワード検証コントロールにインターフェイスを指定します。

2 つのコントロールの要件のため、.config XML ファイルではなく、コードを使用してこの検証コントロールを設定する必要があります。

RegExValidator コンポーネント

これは、ページに含めることができるバリデーターの一種です。 ID はID_RegExValidator (IValidator.h で定義) され、テキスト値は "Microsoft。Wizard.Validation.RegEx"

この検証コントロールは、テキスト コントロール ( IStaticText をサポートするもの) の内容を正規表現と比較し、テキストが正規表現と一致しない場合は失敗します。

または、定義済みの名前付きパターンでこのバリデーターを使用することもできます。 正規表現を使用するには、XML に Pattern というセッター プロパティが含まれている必要があります。 代わりに名前付きパターンを使用する場合は、 NamedPattern という名前 のセッターを使用して、表 7 のいずれかの値に設定します。

表 7. 名前付きパターン セッター

Pattern 説明
Username テキストが 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 コンポーネント

このコンポーネントは、 Logger メソッド ( WizardPageImpl によって実装) を使用してページで使用できます。 このメソッドを使用して、ログ ファイルにエントリを書き込みます。 ログ ファイルの内容は、ユーザーが UDI ウィザードを実行している可能性がある問題を診断するのに役立ちます。

PropertyBag コンポーネント

プロパティ バッグは、メモリ変数のコンテナーです。 これは、 Container()->Properties()を使用してページから入手できます。 メモリ変数は、異なるページ間で一時的なデータを渡す場合に便利です。

TSVariableBag および TSRepository コンポーネント

TSVariableBag コンポーネントを使用すると、タスク シーケンス変数の読み取りと書き込みを行うことができます。 ユーザーが [完了 ] (既定) をクリックするまで、値はメモリ内に保持されます。 ページの TSVariables メソッド (WizardPageImpl 基本クラスによって実装) を使用して TSVariable バッグにアクセスできます。 これらのコンポーネントは、タスク シーケンス変数のすべての読み取りと書き込みをログに記録します。

WmiRepository コンポーネント

このコンポーネントは、WMI クエリを操作するためのファサードを提供します。 ID_WmiRepositoryを使用して CreateInstance ヘルパー関数を呼び出して、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);  

最初の行はスマート ポインターを定義します。 2 行目は、別の呼び出しを介したスマート ポインターの取得を示しています。 演算子は & 、既存のインターフェイスが含まれている場合は常に解放し、内部ポインターのアドレスを返します。 このようなポインターを取得すると、 Pointer インスタンスは 、変数がスコープ外になったときに 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)  

このメソッドは、大文字と小文字を無視しながら 2 つの文字列を比較します (表 9 を参照)。

表 9. StringUtil ヘルパー クラス

返される値 説明
0 文字列が一致し、大文字と小文字が無視される
<0 最初の < 2 番目
>0 最初の > 2 番目

次に例を示します:

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

これらのメソッドは、パラメーターが の形式{0}であるという意味で、Microsoft .NET Format メソッドに少し似ています。 ただし、入力の書式設定は実行されません。単なる置換です。

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> >  

基本インターフェイスは最初のパラメーター、派生インターフェイスは 2 番目のパラメーターです。

UnknownImpl テンプレート クラス

このクラスは UnknownImpl.h で定義され、COM コンポーネントの作成のほとんどの詳細を処理します。 この基底クラスの使用方法の例を次に示します。

classDirectory :public UnknownImpl<IDirectory>  

このコードでは、 IDirectory インターフェイスをサポートするクラスを定義します。

WizardComponent テンプレート クラス

このクラスは IWizardComponent.h で定義されており、コンポーネントの作成やログ記録など、ウィザード サービスへのアクセスを必要とするコンポーネントを作成するための便利な基本クラスです。

たとえば、 CopyFilesTask コンポーネントの定義方法を次に示します。

classCopyFilesTask :public WizardComponent<ITask>  
{  
    ...  

このテンプレート クラスのパラメーターは、コンポーネントに使用する "メイン" インターフェイスです。タスクの場合は 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 型 Description
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" によって実装されます。Wizard.BackgroundTask") コンポーネント。IBackgroundTask.h インターフェイスで定義されています。

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 Finished コールバック メソッドに送信される終了コード。 これは、GetExitCode メソッドからも使用できます。

表15. 終了コード

返される値 説明
E_FAIL 終了する呼び出しが失敗しました。
S_OK スレッドを終了する要求が成功しました。
HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult)

このメソッドを使用して、バックグラウンド スレッドでタスクを実行した結果を取得します (表 16 を参照)。

表 16. 結果コード

パラメーター 説明
pCode 戻り値が不要な場合は、戻り値または nullptr に設定される DWORD へのポインター。 終了時に、このパラメーターは、スレッドが実行されている場合は STILL_ACTIVE 、タスクの Execute メソッドによって返されるコード、またはそのメソッドを呼び出した場合は Terminate メソッドに渡される値に設定されます。
pHresult HRESULT 値が不要な場合は、戻り値または nullptr に設定される HRESULT へのポインター。
HRESULT Close(void)

このメソッドは、バックグラウンド スレッドを解放します。 スレッドが現在実行中の場合は E_INVALIDARG を返し、それ以外 場合はS_OK。

ICheckBox インターフェイス

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

チェック ボックスのチェック状態を設定します。 メソッドが 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 コンポーネントによって実装されます。 このコンポーネントのインスタンスは、 GetControlWrapper ヘルパー関数を使用して、 型CONTROL_COMBO_BOXを使用して取得します。

HRESULT Bind([in] IBindableList *pList)

IBindableList インターフェイスを実装するデータ ソースがある場合は、このメソッドを使用します。 リスト ボックスは、このリストのキャプションを使用してコンテンツを初期化します。

HRESULT Select(int index)

インデックスのコンボ ボックスで項目を選択します。

int Selected(void)

このメソッドは、選択した項目のインデックスを返し、何も選択していない場合は -1 を返します。

void Add([in] LPCTSTR caption)

コンボ ボックスに項目を手動で追加します。

HRESULT GetText([out, retval] LPBSTR pText)

コンボ ボックスで現在選択されている項目の文字列を取得します。

void Clear()

コンボ ボックスからすべての項目を削除します。

IControl インターフェイス

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

このインターフェイスは 、ControlWrapper コンポーネントによって実装されます。 このコンポーネントのインスタンスは、 getControlWrapper ヘルパー関数を使用して、 型CONTROL_GENERICで取得します。

HRESULT SetEnable(BOOL enable)

コントロールを有効または無効にします。

BOOL IsEnabled(void)

コントロールが有効な場合は TRUE、有効でない場合は FALSE を返します。

HRESULT SetVisible(BOOL visible)

コントロールを表示または非表示にします。

ICpuInfo インターフェイス

__interface ICpuInfo : IUnknown  
{  
    BOOL Is64Bit(void);  
};  
概要

このインターフェイスを取得するには、新しい ID_CpuInfo コンポーネントを作成します。 1 つのメソッドは、CPU が 32 ビットか 64 ビットかを報告します。 64 ビット コンピューターに 32 ビット オペレーティング システムがある場合、このメソッドは TRUE を返します。これは CPU の幅 (オペレーティング システムではなく) のみを報告するためです。

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を使用して作成する Directory コンポーネントは、ファイル システム内のディレクトリを操作するためのファサードを提供します。

BOOL FileExists(LPCWSTR 名)

指定した名前のファイルが存在する場合、このメソッドは TRUE を返します。

BOOL FindFirst([in] LPCWSTR name)

このメソッドは、指定した名前の最初の一致を検索します。 ワイルドカード文字をサポートし、ファイル名とディレクトリ名の両方を返します。 一致するものが見つかった場合は 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 ページの Logger メソッドを使用してページで使用できる ロガー インスタンス。
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 Update(void)

クエリを実行します。 このメソッドを呼び出した後に使用可能なドライブ一覧は、ドライブ文字で並べ替えられます。

HRESULT AddProperty(ENUM_DISK_QUERY_SECTION セクション, LPCTSTR propName, LPCTSTR propNameReturned)

このメソッドは、クエリ結果で使用できるようにする追加のプロパティの名前を追加します。 Update を呼び出す前に、このメソッドを呼び出します。 表 18 に、便利なプロパティの 3 つを示します。

表 18. HRESULT AddProperty: 便利なプロパティ

Section プロパティ 説明
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 index, 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)

このコンポーネントが管理する新しいイメージ リストを作成します。 このメソッドを 1 回だけ呼び出します。

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 コンポーネントによって実装されます。 このコンポーネントのインスタンスは、 GetControlWrapper ヘルパー関数を使用して、 型CONTROL_LIST_VIEWを使用して取得します。

int AddItem([in] LPCTSTR text)

リスト ボックスに新しい行を追加します。 メソッドは、追加した項目のインデックスを返します。

int AddColumn(int width, [in] LPCTSTR text)

リスト ビューに新しい列を追加します。

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

表 21 に示すように、リスト ボックスの最初の列以外の列にテキストを設定します。

表 21. HRESULT SetSubItem

パラメーター 説明
index 変更するリスト アイテムのインデックス
column 更新する列のインデックス。最初の列は AddItem で設定され、列 2 以降はこのメソッドで設定されます
text 列に表示する文字列
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 コンポーネントによって実装されます。 このコンポーネントのインスタンスは、 GetControlWrapper ヘルパー関数を使用して、 型CONTROL_PROGRESS_BARを使用して取得します。

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 コンポーネントによって実装されます。 このコンポーネントのインスタンスは、 GetControlWrapper ヘルパー関数を使用して、 型CONTROL_RADIO_BUTTONを使用して取得します。

void SetGroup(int firstId, int lastId)

ラッパーに、グループとして扱う必要があるラジオ ボタンの範囲を指定します。 CheckRadio を呼び出す前に、このメソッドを呼び出します。

void CheckRadio(int id)

特定のラジオ ボタンを、選択したラジオ ボタンのグループ内の 1 つのボタンに設定します。 このメソッドを呼び出す前に 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 コンポーネントによって実装されます。 このコンポーネントのインスタンスは、 GetControlWrapper ヘルパー関数を使用して、 型CONTROL_STATIC_TEXTで取得します。

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 パラメーターは、3 つのセッター値へのアクセスを提供します。一方、pTaskSettings パラメーターは Task 要素と子へのアクセスを提供します。 ほとんどのタスクでは、 pProperties パラメーターからデータを読み取る必要があります。

実行
HRESULT Execute(LPDWORD pReturnCode)  

タスクを実行するコードを記述する場所を次に示します。 このメソッドは、エラーがない場合は S_OK を返し、タスクの実行中にエラーが発生した場合は別の HRESULT を返すことができます。 プリフライト ページ使用している場合、このメソッドが返すS_OK以外の値は、ExitCodes> セクションの <Error> 要素と<一致します。

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 コンポーネントによって実装されます。 このコンポーネントのインスタンスは、 GetControlWrapper ヘルパー関数を使用 してCONTROL_TREE_VIEW型で取得します。

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 item)

ツリー ビュー項目が表示されていることを確認します。 ツリー ビューは、必要に応じてスクロールして、この項目を表示します。

BOOL SelectItem(HTREEITEM 項目)

現在選択されている項目を、指定した項目に設定します。 この後 に SetFirstVisible を呼び出して、新しく選択した項目が確実に表示されるようにすることができます。

void CheckItem(HTREEITEM item, UINT checkState)

メソッドは基本的に、ツリー ビューのチェック ボックスに表示されるイメージを設定します。 これらのイメージは、ツリー ビューが管理する別の ImageList コントロールにあります。 既定では、このイメージ リストには、表 22 に示す 3 つのイメージが含まれています。

表 22.void CheckItem イメージ リストの既定値

Checkstate 説明
0 空白
1 クリア
2 選択済み
HTREEITEM SelectedItem(void)

このメソッドは、現在選択されているツリー ビュー項目のハンドルを返します。

int SetItemHeight(SHORT height)

このメソッドは、ツリー ビュー コントロール内のすべての項目の高さをピクセル単位で設定します。 前の高さをピクセル単位で返します。

HRESULT EnableItem(HTREEITEM 項目, BOOL enable)

このメソッドは、ツリー内の 1 つの項目を有効または無効にします。 子を含む項目を無効にしても、子は無効になりません。

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 color)

選択した項目に使用する背景色を設定します。

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 Result

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 メソッドを呼び出してフォームを設定した後に を呼び出します
Validate 初期検証を実行します
フォーム イベントの処理

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 検証を無効にするには TRUE に、通常の検証を復元するには 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 に設定します
Type コントロールの種類。これは次のいずれかです。

- 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 このグループに追加する 1 つのラジオ ボタンの ID
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)  

このメソッドを使用すると、ラジオ ボタン グループ全体を有効または無効にすることができます。 ラジオ グループを無効にすると、グループ内のすべてのラジオ ボタン コントロールと、 AddToGroup で追加されたラジオ ボタンのすべての子が無効になります。 表 34 および表 35 を参照してください。

表 34. EnableRadioGroup

パラメーター 説明
Groupname AddRadioGroup の呼び出しで既に定義したラジオ ボタン グループの名前
Enable ラジオ ボタン グループを有効にするには TRUE に設定し、グループを無効にするには FALSE に設定します

表 35. HRESULT EnableRadioGroup

HRESULT 型 説明
S_OK グループの有効化または無効化
E_INVALIDARG 指定した名前のラジオ ボタン グループはありません
InitFields
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)  

このメソッドを呼び出す前に、XML が制御できるフィールドごとに AddField を呼び出します。 このメソッドは常に S_OKを返します。

pFieldCallback パラメーターは省略可能です。 指定した場合、フォーム コントローラーは SetFieldDefault を呼び出し、 CONTROL_STATIC_TEXTまたはCONTROL_CHECK_BOX ではないコントロールに対 して呼び出します。 この動作により、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

パラメーター 説明
Key このパラメーターは、ページに固有である必要があります。 各ページに独自の概要情報があることを確認するために使用されます。
sectionCaption このページの概要情報の [概要 ] ページに表示されるヘッダー。 通常、このパラメーターの値として DisplayName() を使用します。
AddSummaryItem
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)  

このメソッドを使用すると、XML で設定された項目の上とそれ以外の [概要] ページにサマリー項目を追加できます。 表 37 を参照してください。

表 37. HRESULT AddSummaryItem

パラメーター 説明
First 左側に表示されるサマリー 項目のキャプション
Second 右側に表示される値
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);  
};  
概要

バリデーター は、ページ上の 1 つのコントロールを検証できるコンポーネントです。 バリデーターを実装する最も簡単な方法は、 BaseValidator.h ヘッダー ファイルで定義されている BaseValidator クラスのサブクラスにすることです。

HRESULT Init(IControl *pControl, LPCTSTR メッセージ)

コードでバリデーターを作成する場合は、このメソッドを呼び出してバリデーターを初期化できます。 表 39 を参照してください。

表 39. HRESULT Init

パラメーター 説明
pControl バリデーターが検証する必要があるコントロール
Message コントロールが無効な場合にページに表示するメッセージ
HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties)

フォーム コントローラーは、ページの XML に基づいて作成される検証コントロールを初期化するために、このメソッドを呼び出します。 表 40 を参照してください。

表 40. HRESULT Init メソッド

パラメーター 説明
pControl バリデーターが検証する必要があるコントロール
pContainer バリデーターがロガーにアクセスする必要がある場合、または他のコンポーネントを作成する必要がある場合
pProperties バリデーターのプロパティ (セッター要素) へのアクセスを提供します
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 を返すか、例外をスローします。

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 index, 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 インターフェイスのメソッドを使用して取得します。このインターフェイスは 、Settings メソッドを使用してページで使用できます。

ページの 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>  

Settings()->GetDataNode(L"Network", pData) を呼び出すと、 & 2 つのデータ項目 (それぞれが 2 つのプロパティを持つ) を持つ IDataNodes インスタンスが提供されます。

size_t Count()

このメソッドは 、DataItem 要素の数を返します。

HRESULT SetCaptionProperty(LPCTSTR captionProperty)

このインターフェイスをサポートするコンポーネントでは 、IBindableList もサポートされているため、ページの XML からのデータをコンボ ボックスに簡単に設定できます。 このメソッドは、このバインドに使用する各 DataItem 要素のプロパティ (セッター) を制御します。 たとえば、 DisplayName を使用してこのメソッドを呼び出すと、その setter プロパティをデータ バインディングに使用できます。 コンボ ボックスには、 PublicDev Team がアイテムとして含まれます。

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

このメソッドは、 DataItem 要素の 1 つからプロパティを取得します。 表 41 と表 42 を参照してください。

表 41. DataItem GetProperty

パラメーター 説明
インデックス プロパティ値を取得する DataItem のインデックス値 (0 以降)
PropertyName 値を取得する setter プロパティの名前
propertyValue 戻り値には、プロパティの文字列値が含まれます

表 42. HRESULT GetProperty

HRESULT 型 説明
S_OK プロパティが取得されました。
E_INVALIDARG インデックスは配列の末尾を超えています。
HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode)

このメソッドは GetProperty に似ていますが、DataItem から 1 つの値を返す代わりに、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 型, 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)

サービス は、複数の場所で使用できるコンポーネントの 1 つのインスタンスです。 このメソッドを使用して、あるページにサービスを登録し、別のページから同じインスタンスを取得できます。

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)  

このメソッドは内部の使用のみに限ります。

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

このメソッドは内部の使用のみに限ります。

エラー
HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message)  

エラーに関する情報をログに記録するには、このメソッドを呼び出します。 表 46 を参照してください。

表 46. HRESULT エラー

パラメーター 説明
エラー 呼び出しによって返されるエラー コード (このコードは、ログ エントリに数値として表示されます)。
コンポーネント エラーの原因を識別する文字列。これは通常、ページまたは記述したコンポーネントです。
Message エラーの原因を説明するメッセージ
Error2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)  

このメソッドは Error メソッドに似ていますが、2 部構成のメッセージを指定できます。 最後のメッセージには、出力ファイルに "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() メソッドを使用している場合の Page ノードです。

IStringProperties * Properties()

このメソッドは、メイン ノードの下の setter プロパティ値にアクセスできます。 ページの場合、これらは最上位のプロパティです。

HRESULT SelectNodes(LPCTSTR xPath, IXMLDOMNodeList **ppList)

XPath 式を使用して XML ノードの一覧を直接取得する場合は、このメソッドを呼び出します。 可能であれば、他のいずれかの方法を使用することをお勧めします。 このメソッドは、他の方法でノードにアクセスできない場合にのみ使用します。

HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)

XPath 式を使用して 1 つの 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)

このメソッドを使用すると、特定の Data ノードの下にある 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 から取得されるセッター要素のセットに簡単にアクセスできます。 このインターフェイスは、 Settings()->Properties()を使用してページのプロパティで使用できます。

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

このメソッドは、1 つのプロパティ値を取得します。 表 47 と表 48 を参照してください。

表 47. IHRESULT プロパティ値の取得

パラメーター 説明
PropertyName 読み取るプロパティの名前
pPropValue 終了時に、プロパティ値が文字列として格納されます (このようなプロパティがない場合、この値は 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 メッセージ)

このメソッドは、1 つ以上のタスクが失敗した場合に表示されるメッセージを設定します。

HRESULT Start(void)

このメソッドは、すべてのタスクを開始します。 各タスクは、個別のスレッドで開始されます。

HRESULT GetTaskMessage(size_t index, LPBSTR message)

このメソッドは内部の使用のみに限ります。 タスクのリスト内のインデックスに基づいて、タスクの現在のメッセージを取得します。

HRESULT GetResultType)(size_t インデックス, LPBSTR 型)

このメソッドは、タスクの現在の "型" を取得します。 表 50 に、使用可能な型を示します。

表 50。 HRESULT GetResultType

説明
0 成功したタスクを表します
1 警告を返したタスクを表します
-1 失敗したタスクを表します

型は、タスクの終了コードまたはエラー コードを確認し、タスク <の ExitCodes> XML 要素で一致するものを見つけることによって取得されます。

HRESULT GetProperty(size_t インデックス, LPCTSTR propertyName, LPBSTR 値)

このメソッドは、進行状況ページとプリフライト ページで BitmapFilename setter プロパティを取得するために使用され、強調表示したタスクのメッセージの横に画像を表示できます。 つまり、タスクの XML にカスタム セッターを追加し、このメソッドを使用して取得できます。

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);  
};  
概要

このインターフェイスは、(WizardPageImpl によって実装された) Container メソッドを使用してページで使用でき、ウィザードのさまざまなサービスにアクセスできます。

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

Format 説明
$Name$ メモリ変数の値をこの名前に置き換えます (名前を持つメモリ変数がない場合は、"トークン" が削除されます)。
%Name% タスク シーケンス変数または環境変数。 順序は次のとおりです。

1. タスク シーケンス変数の値 (存在する場合) を使用します。
2. 環境変数の値 (存在する場合) を使用します。
3. それ以外の場合は、文字列からこのテキストを削除します。

表 52. HRESULT パラメーター

パラメーター 説明
Source 入力文字列。変数と % 変数の任意の$組み合わせを含めたり、まったく含めなかったりします。
pDest 戻り値には、表 51 に従ってすべてのトークンが置き換えられた新しい文字列が含まれています。
HRESULT GotoPage(LPCTSTR pageName)

このメソッドは完全にはテストされていません。 .config XML ファイルで定義されているページの名前に基づいて、特定のページに直接切り替えることができるという考え方です。 このメソッドを呼び出すと、ページ の OnNextClicked がバイパスされます 。 また、このメソッドの動作は変更される可能性があるため、ご自身の責任で使用してください。

int ShowMessageBox(LPCTSTR メッセージ, 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 には、BackButtonNextButton の 2 つの値があります。

HRESULT SetEnable(WizardButtons ボタン、BOOL を有効にする)

いずれかのウィザード ボタンを有効または無効にすることを要求します。 ボタンが、要求した状態と一致しない可能性があります。 たとえば、 /preview スイッチを使用して UDI ウィザードを実行すると、ボタンは常に有効になります。 WizardButtons には、BackButtonNextButton の 2 つの値があります。

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_OK 、エラーが発生した場合 はS_FALSE を返します。 エラーが発生した場合は、 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 式を使用してドキュメントから 1 つのノードを取得できます。 常に S_OKを返します。

HRESULT AddSchema(LPCTSTR filename, 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);  

このコードでは、 新しいID_Directory コンポーネントを作成して、そのコンポーネントの IDirectory インターフェイスを取得します。

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要素のセットをグループ化する
Page ウィザード ページの構成設定を編集するために使用される、UDI ウィザード デザイナーに読み込むウィザード ページ エディターを指定します
Param Task または Validator 要素に渡され、UDI ウィザード構成ファイルの Setter 要素に対応するパラメーターを指定 します。注: 親が Task または Validator 要素の場合、この要素の属性は異なります。
タスク タスク ライブラリ内のタスクを指定します
TaskItem タスクに渡されるパラメーターのグループを指定します
TaskLibrary Task 要素のセットをグループ化する
バリデーター バリデーター ライブラリ内のバリデーターを指定します
ValidatorLibrary バリデーター要素のセットをグループ化する

DesignerConfig

この要素は、他のすべての要素のルートを指定します。

要素の情報

表 55 に 、DesignerConfig 要素に関する情報を示します。

表 55. DesignerConfig 要素情報

Attribute
出現回数 1 つ: この要素は必須です。
親要素 None
コンテンツ DesignerMappingsTaskLibraryValidatorLibrary
要素属性

この要素には属性がありません。

注釈

なし。

<DesignerConfig>  
   + <TaskLibrary>  
   + <ValidatorLibrary>  
   + <DesignerMappings>  
</DesignerConfig>  

DesignerMappings

この要素は、 Page 要素のセットをグループ化します。

要素の情報

表 56 に 、DesignerMappings 要素に関する情報を示します。

表 56. DesignerMappings 要素情報

Attribute
出現回数 DesignerConfig 要素内の 0 または 1 (この UDI ウィザード デザイナー構成ファイルに対応するカスタム ウィザード ページが DLL に存在しない場合、この要素は省略可能です)。
親要素 DesignerConfig
コンテンツ Page
要素属性

この要素には属性がありません。

注釈

なし。

<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>  

Page

この要素は、UDI ウィザード デザイナーに読み込まれるウィザード ページ エディターを指定します。このエディターは、ウィザード ページの構成設定を編集するために使用されます。

要素の情報

表 57 に 、Page 要素に関する情報を示します。

表 57. Page 要素情報

Attribute
出現回数 DesignerMappings 要素で定義されているウィザード ページごとに 1 つ以上
親要素 DesignerMappings
コンテンツ 整形式の XML コンテンツ
要素属性

表 58 に 、Page 要素の属性と、それぞれの説明を示します。

表 58。 Page 要素の属性と対応する値

属性 説明
説明 UDI ウィザード デザイナーに表示されるパラメーターに関する情報を提供するテキストを指定します
DesignerAssembly ウィザード ページ エディターに関連付けられている.dll ファイルの名前を指定します (.dll ファイルは 、installation_folder\Bin フォルダーに存在する必要があります ( ここで、installation_folder は MDT をインストールしたフォルダーです)。
DesignerType DesignerAssembly 属性で指定された.dll ファイル内のウィザード ページ エディターの名前を指定します (これは、ウィザード ページ エディターの .NET 型Microsoftで、完全修飾Microsoft .NET 名前空間です)。
DisplayName UDI ウィザード デザイナーに表示されるページ エディターのわかりやすい名前を指定します
Dll ウィザード ページに関連付けられている.dll ファイルの名前を指定します (.dll ファイルは installation_folder\Templates\Distribution\Tools\platform フォルダーに存在する必要があります ( ここで、installation_folder は MDT をインストールしたフォルダーで、 プラットフォーム は 32 ビット バージョンの 場合は x86x64 は 64 ビット バージョン用です)。 メモ: DLL プロセッサ アーキテクチャが、インストールされている MDT プロセッサ アーキテクチャと一致していることを確認します。 たとえば、32 ビット バージョンの MDT をインストールした場合は、ウィザード ページに 32 ビット DLL を使用していることを確認します。
Image ポータブル ネットワーク グラフィックス (PNG) 形式のページのイメージの名前を指定します (.png ファイルは 、installation_folder\Bin\Images フォルダーに存在する必要があります ( ここで、installation_folder は MDT をインストールしたフォルダーです)。
Type ウィザード ページ エディターを指定し、カスタム ページが登録されたときに使用される名前と一致する必要があります
注釈

UDI ウィザード デザイナーでは、テンプレートのような Page 要素を使用して、新しいウィザードの初期 XML を作成します。 UDI ウィザード デザイナーは、スキーマ検証を実行して、 Page 要素と子要素の形式が有効であることを確認します。 この要素は、UDI ウィザードのページの種類と、UDI ウィザード デザイナーがカスタム ページ エディターを使用してこの種類のページを編集および作成するために必要な情報との間のマッピングを提供します。

なし。

Param

この要素は、親 Task または Validator 要素に渡され、UDI ウィザード構成ファイルの Setter 要素に対応するパラメーターを指定します。

注:

親が Task または Validator 要素である場合、この要素の属性は異なります。

要素の情報

表 59 に 、Param 要素に関する情報を示します。

表 59。 Param 要素情報

Attribute
出現回数 TaskItem または Validator の親要素ごとに 1 つ以上
親要素 TaskItemバリデーター
コンテンツ 整形式の XML コンテンツ
要素属性

表 60 に 、Param 要素の属性を示し、それぞれの説明を示します。

表 60。 Param 要素の属性と対応する値

属性 説明
説明 UDI ウィザード デザイナーに表示されるパラメーターに関する情報を提供するテキストを指定 します注: この属性は 、Validator 要素に対してのみ有効です。
DisplayName バリデーター パラメーターのわかりやすい名前を指定します。これは、UDI ウィザード デザイナーの適切な UDI ウィザード ページに表示されます (通常、この名前は Name 属性よりもわかりやすい名前です)。 メモ: この属性は、 Validator 要素に対してのみ有効です。
名前 親要素に応じて、タスクまたはバリデーターに渡されるパラメーターの名前を指定します (この属性は、UDI ウィザード構成ファイルの Setter 要素の Property 属性になります)。メモ:このパラメーターは、TaskItemValidator の両方の親要素に使用されます。
注釈

なし。

なし。

タスク

この要素は、タスク ライブラリ内のタスクを指定します。

要素の情報

表 61 に 、Task 要素に関する情報を示します。

表 61。 Task 要素情報

Attribute
出現回数 TaskLibrary 要素内の 1 つ以上 (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 ウィザード デザイナーに表示されるタスクの名前を指定します。
Type ファクトリ レジストリに登録され、.dll ファイル内の特定のタスクを呼び出すために使用されるタスクの種類を指定します。
注釈

なし。

なし。

TaskItem

この要素は、タスクに渡されるパラメーターのグループを指定します。

要素の情報

表 63 に 、TaskItem 要素に関する情報を示します。

表 63. TaskItem 要素情報

Attribute
出現回数 Task 要素ごとに 1 つ以上
親要素 タスク
コンテンツ Param
要素属性

表 64 に TaskItem 要素の属性を示し、それぞれの説明を示します。

表 64. TaskItem 要素の属性と対応する値

属性 説明
UDI ウィザード構成ファイルで作成される要素の種類を指定します。 この属性の値に対応する XML 要素が作成されます。 たとえば、この属性の値が File の場合、UDI ウィザードの構成ファイルに File 要素が作成されます。

現在、サポートされている値は次のとおりです。

- 2 つの Param 子要素 (Name 属性が Source に設定された 1 つの Param 子要素、Name 属性が Dest に設定されたもう 1 つの Param 子要素) が必要なファイル
- Setter。1 つの Param 子要素が必要です
注釈

なし。

なし。

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. バリデーター要素の属性と対応する値

属性 説明
説明 UDI ウィザード デザイナーに表示される検証コントロールに関する情報を提供するテキストを指定します
DisplayName UDI ウィザード デザイナーに表示される検証コントロールのわかりやすい名前を指定します (通常、この名前は Name 属性よりもわかりやすい名前です)。
Dll 検証コントロールに関連付けられている.dll ファイルの名前を指定します (.dll ファイルは installation_folder\Templates\Distribution\Tools\platform フォルダーに存在する必要があります ( ここで、installation_folder は MDT をインストールしたフォルダーで、 プラットフォーム は 32 ビット バージョンの場合は x86 、64 ビット バージョンの場合は x64 です)。
名前 適切な UDI ウィザード ページと UDI ウィザード デザイナーに表示される検証コントロールの名前を指定します。
Type レジストリ ファクターに登録され、.dll ファイル内の特定の検証コントロールを呼び出すために使用される検証コントロールの種類を指定します。
注釈

なし。

なし。

ValidatorLibrary

この要素は、 バリデーター 要素のセットをグループ化します。

要素の情報

表 68 に 、ValidatorLibrary 要素に関する情報を示します。

表 68。 ValidatorLibrary 要素情報

Attribute
出現回数 DesignerConfig 要素内の 0 または 1 (この UDI ウィザード デザイナー構成ファイルに対応するカスタム 検証コントロールが DLL に存在しない場合、この要素は省略可能です)。
親要素 DesignerConfig
コンテンツ バリデーター
要素属性

この要素には属性がありません。

注釈

なし。

<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL="" Description="Requires text in a field" 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"> +<Validation DLL="" Description="Require the contents match a regular expression" 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

この Boolean プロパティを使用すると、 UnlockedLocked (有効または無効) の間で状態を変更するボタンの可視性を制御できます。 に設定されている場合:

  • True の場合、ボタンは表示されません

  • False の場合、ボタンが表示されます (既定値です)。

HideDefaultTab

この Boolean プロパティを使用すると、既定値の設定に使用するコントロールを含むセクションの可視性を制御できます。 プロパティはタブを参照しますが、 FieldElementControl にはタブはなく、非表示にできるセクションがあります。 に設定されている場合:

  • True、セクションは表示されません

  • False の場合、セクションは表示されます (これは既定値です)。

HideBorder

この Boolean プロパティを使用すると、フィールド コントロールの周囲の境界線の可視性を制御できます。 に設定されている場合:

  • True、罫線は表示されません

  • False の場合、罫線が表示されます (既定値です)。

HideImage

この Boolean プロパティを使用すると、 FieldImageSource プロパティが構成するイメージの可視性を制御できます。 に設定されている場合:

  • True の場合、イメージは表示されません

  • False の場合、イメージが表示されます (既定値です)。

HideValidationTab

この Boolean プロパティを使用すると、バリデーターの一覧が管理されるセクションの可視性を制御できます。 プロパティはタブを参照しますが、 FieldElementControl にはタブはなく、非表示にできるセクションがあります。 に設定されている場合:

  • True、セクションは表示されません

  • False の場合、セクションは表示されます (これは既定値です)。

HideSummaryTab

この Boolean プロパティを使用すると、フィールドのサマリー キャプションを構成するセクションの可視性を制御できます。 フィールドのキャプションと対応する値は、ステージ フローの SummaryPage ウィザード ページの種類に表示されます。 プロパティはタブを参照しますが、 FieldElementControl にはタブはなく、非表示にできるセクションがあります。 に設定されている場合:

  • True、セクションは表示されません

  • False の場合、セクションは表示されます (これは既定値です)。

HideTaskSequenceTab

この Boolean プロパティを使用すると、フィールドに対応するタスク シーケンス変数を構成するセクションの可視性を制御できます。 プロパティはタブを参照しますが、 FieldElementControl にはタブはなく、非表示にできるセクションがあります。 に設定されている場合:

  • True、セクションは表示されません

  • False の場合、セクションは表示されます (これは既定値です)。

SetterControl

このコントロールを使用して、UDI ウィザード構成ファイルの Setter 要素の値を変更します。 このコントロールには、 setter 要素の値を変更するために使用される子コントロールが含まれています。

.xaml ファイルからの次の抜粋は、SetterControl を使用して、子 TextBox コントロールを使用して 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

これを、セッターに接続するビューまたはビュー モデルのプロパティにバインドする必要があります。 これは、 FieldElementControl の説明に従って、フィールドにバインドする方法と似ています。

HeaderText

このプロパティを使用すると、コントロールのヘッダーに表示されるテキストを設定できます。 このプロパティは、コントロールのタイトルと考えてください。既定では、太字のオレンジ色のテキストとして表示されます。

InstructionText

このプロパティをヘッダーの下に表示するテキスト (通常はカスタム エディターのユーザーにフィールドの動作を変更するタイミングと理由を示す命令テキスト) に設定します。

インターフェイス

表 70 に、カスタム ウィザード ページ エディターの作成に使用できるインターフェイスの一覧を示します。

表 70。 カスタム ウィザード ページ エディターの作成に使用できるインターフェイス

インターフェイス 説明
IDataService UDI ウィザード構成ファイルの Data 要素にフィールドを接続するには、このインターフェイスを使用します。
IMessageBoxService このインターフェイスは、メッセージ ボックスの表示に使用できるメソッドへのアクセスを提供します。

IDataService

このインターフェイスには、いくつかのプロパティとメソッドが含まれていますが、必要なプロパティは 1 つだけです。 このプロパティは、ここに記載されている唯一のプロパティです。

依存関係の挿入を使用して、クラスで次のようなコードを使用して、このインターフェイスへのポインターを取得できます。

[Dependency]  
public IDataService DataService { get; set; }  
プロパティ

表 71 に、 IDataService インターフェイスのプロパティを示します。

表 71。 IDataService インターフェイスのプロパティ

インターフェイス 説明
CurrentPage このプロパティは、UDI ウィザード構成ファイルで編集されている現在のページのコンテキストの下にある XML 要素、属性、および値へのアクセスを提供します
CurrentPage
XElement CurrentPage { get; set; }  

このプロパティは、現在のページの XML へのアクセスを提供します。 このプロパティは設定しないでくださいが、ページの XML は自由に変更できます。 サンプル ページ エディターには、XML の変更例が示されています。 このプロパティは、主にカスタム データがある場合に使用します。 フィールドとプロパティ (セッター) の場合は、すべての詳細を管理する事前構築済みのコントロールを使用できます。

IMessageBoxService

このインターフェイスは、メッセージ ボックスの表示に使用できるメソッドへのアクセスを提供します。 メッセージ ボックスを表示するためにインターフェイスが必要な理由が疑問に思われる場合があります。 実際には、デザイナー ページの自動テストを記述する際に役立つため、Microsoftは コードで このインターフェイスを 使用しません。

ただし、これらのメソッドを使用すると、1 つの便利な利点が得られます。ダイアログ ボックスには常に "所有者" が 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 アイコン) アイコンと [OK] ボタンが表示されたメッセージ ボックスを表示します
ShowMessageBox(string message, string caption, MessageBoxButton ボタン, MessageBoxImage アイコン) アイコンとボタンのさまざまな組み合わせでメッセージ ボックスを表示します
ShowMessageBox(例外例外) 例外に関する情報を提供し、[ OK] ボタンがあるメッセージ ボックスを表示します
ShowMessageBox(String message, String caption, MessageBoxImage アイコン)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);  

このメソッドは、[ OK] ボタンを含むメッセージ ボックスを表示します。 表 74 を参照してください。

表 74。 ShowMessageBox(String message, String caption, MessageBoxImage アイコン) メソッドのパラメーター

パラメーター 説明
message メッセージ ボックスのコンテンツ領域に表示するメッセージ
caption ダイアログ ボックスのタイトル バーに表示するテキスト
icon メッセージ ボックスに表示するアイコンの種類
ShowMessageBox(string message, string caption, MessageBoxButton ボタン, MessageBoxImage アイコン)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);  

このメソッドは、表示するボタンのセットを含むメッセージ ボックスを表示し、クリックしたボタンを報告します。 表 75 を参照してください。

表 75. ShowMessageBox のパラメーター(文字列メッセージ、文字列キャプション、MessageBoxButton ボタン、MessageBoxImage アイコン) メソッド

パラメーター 説明
message メッセージ ボックスのコンテンツ領域に表示するメッセージ
caption ダイアログ ボックスのタイトル バーに表示するテキスト
button 表示するボタン
icon メッセージ ボックスに表示するアイコンの種類
ShowMessageBox(例外例外)
void ShowMessageBox(Exception exception);  

このメソッドは、例外に関する情報を報告するメッセージ ボックスを表示します。 このメッセージ ボックスには、1 つの [OK] ボタンがあります。 表 76 を参照してください。

表 76。 ShowMessageBox(Exception exception) メソッドのパラメーター

パラメーター 説明
例外 報告する例外 (ダイアログ ボックスでは例外が使用されます 。内容としてのメッセージ 。)
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);  

このメソッドは、新しいダイアログ ボックスを作成します。その内容は 、viewType パラメーターで指定したテキストです。 UDI デザイナーは、この型の新しいインスタンスを作成し、[ OK] ボタンと [キャンセル ] ボタンがあるダイアログ ボックスで折り返します。

dialogPayload パラメーターを使用して、コントロールにデータを渡します。 SDK ディレクトリの SampleEditor ソリューションには、この機能を使用する方法の例があります。

ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);  

このメソッドを使用すると、ナビゲーション用の [次へ ] ボタンと [ 戻る ] ボタンを含むダイアログ ボックス内にカスタム エディターを表示できます。 Microsoftでは、このメソッドを使用する方法のサンプルは提供されていません。

UDI ウィザード構成ファイル スキーマ リファレンス

このファイルは UDI ウィザードによって使用され、UDI ウィザード デザイナーによって構成されます。 このファイルは、次の構成に使用されます。

  • UDI ウィザードに表示されるウィザード ページ

  • UDI ウィザードのウィザード ページのシーケンス

  • 各ウィザード ページのフィールドの設定

  • UDI ウィザード デザイナーで使用できる StageGroups

  • UDI ウィザード デザイナーの各展開ウィザード内で使用可能なステージ

    77 には、UDI ウィザード構成ファイルの要素とその説明が一覧表示されます。 Wizard 要素は、この参照のルート ノードです。

表 77。 UDI ウィザード構成ファイル内の要素とその説明

要素名 説明
Data Page 要素内の個々の DataItem 要素をグループ化し、Name 属性で名前を付けます。
Dataitem Page 要素内の個々の Setter 要素をグループにします。 DataItem 要素内に 1 つ以上の Data 要素を含めることで、階層データを作成できます。 各 DataItem 要素は、個々の項目を表します。 たとえば、使用可能なドライブの一覧には、表示名の DataItem と、対応するドライブ文字の別の DataItem 要素があります。
Default 親 Field 要素または RadioGroup 要素で指定されたフィールドの既定値を指定します。 既定値は、この要素で角かっこで囲まれた値に設定されます。
Dll UDI ウィザードと UDI ウィザード デザイナーによって読み込まれ、参照される DLL を指定します。
Dll 個々の DLL 要素をグループにします。
エラー タスクから返される可能性のあるエラー コードを指定します。 エラー コードの値は、タスクの HRESULT によって返され、より具体的なエラー情報を提供するために、この要素によってトラップされます。
Exitcode タスクの終了コードを指定します。 終了コードは、タスクが想定する戻りコードです。 可能な終了コードごとに ExitCode 要素を作成します。 それ以外の場合は、 Value 属性にアスタリスク (*) を指定して、他の ExitCode 要素にリストされていない戻りコードを処理できます。
ExitCodes Task 要素または Error 要素の ExitCode 要素と Error 要素のセットをグループ化します。
Field XML をカスタマイズするために使用される Page 要素内のコントロールのインスタンスを指定します。 すべてのコントロールで XML を使用したカスタマイズが許可されているわけではありません。 Field 要素を使用するコントロールのみです。
フィールド Page 要素内の個々の Field 要素をグループにします。
ファイル Microsoftを使用して、ファイル コピー操作のソースとコピー先を指定します。Wizard.CopyFilesTask タスクの種類。 個別の File 要素を含め、1 つのタスクで複数のファイルをコピーできます。
Page ページのインスタンスを指定し、ページのすべての構成設定を含めます。
PageRef StageGroup 内のステージ内のページのインスタンスへの参照を指定します。
Pages 個々の Page 要素をグループにします。
RadioGroup Field 要素内のラジオ ボタンのグループを指定します。
StageGroup 1 つ以上のステージのグループを指定します。
StageGroups UDI ウィザード構成ファイル内のステージ グループのセットをグループ化します。
セッター Property プロパティで名前を付けるプロパティの値の プロパティ 設定を指定します。
ステージ StageGroup 内のステージを指定し、1 つ以上の PageRef 要素を含みます。
スタイル ウィザードの上部に表示されるタイトルや UDI ウィザードに表示されるバナー 画像など、UDI ウィザードの外観を構成する個々の セッター 要素をグループ化します。
タスク Page 要素で指定されたページで実行するタスクを指定します。
タスク Page 要素の一連のタスクをグループ化します。
バリデーター Field 要素で指定されたフィールド コントロールの検証コントロールを指定します。
ウィザード 他のすべての要素のルートを指定します。

データ

この要素は、Page 要素内の個々の DataItem 要素をグループ化し、Name 属性によって名前が付けられます。

要素の情報

表 78 に 、Data 要素に関する情報を示します。

表 78。 データ要素情報

Attribute
出現回数 Page 要素内の 0 個以上 (この要素は省略可能です)。
親要素 PageDataItem
コンテンツ DataItemSetter
要素属性

表 79 に Data 要素の属性を示し、それぞれの説明を示します。

表 79。 Data 要素の属性と対応する値

属性 説明
名前 Data 要素の名前を指定します
注釈

Name 属性を使用すると、コードは特定のデータ セットを取得できます。

なし。

Dataitem

この要素は、Page 要素内の個々の Setter 要素をグループにします。 DataItem 要素内に 1 つ以上の Data 要素を含めることで、階層データを作成できます。 各 DataItem 要素は、個々の項目を表します。 たとえば、使用可能なドライブの一覧には、表示名の DataItem と、対応するドライブ文字の別の DataItem 要素があります。

要素の情報

表 80 に 、DataItem 要素に関する情報を示します。

表 80。 DataItem 要素情報

Attribute
出現回数 Data 要素内の 0 個以上 (この要素は省略可能です)。
親要素 Data
コンテンツ データセッター
要素属性

この要素には属性がありません。

注釈

なし。

なし。

既定値

この要素は 、親 Field または RadioGroup 要素で指定されたフィールドの既定値を指定します。 既定値は、この要素が角かっこで囲まれた値に設定されます。

要素の情報

表 81 に 、Default 要素に関する情報を示します。

表 81。 既定の要素情報

Attribute
出現回数 Field 要素または RadioGroup 要素内の 0 個以上 (この要素は省略可能です)。
親要素 フィールド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 要素内の 1 つ以上
親要素 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
出現回数 1 つ
親要素 ウィザード
コンテンツ 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 この要素がエラー、警告、または成功を表すかどうかを指定します。 Type で指定する値は、ExitCodes 要素内で一意である必要があります。 この要素の有効な値を次に示します。

- 0.要素は成功を表します。
- 1. 要素は警告を表します。
- -1。 要素はエラーを表します。
タスクが返したコードの値を数値として指定します。 アスタリスク (*) の値を指定すると、他の Error 要素にリストされていない戻りコードの既定の要素が示されます。
注釈

なし。

なし。

Exitcode

この要素は、タスクに対して可能な終了コードを指定します。 終了コードは、タスクが想定する戻りコードです。 可能な終了コードごとに ExitCode 要素を作成します。 それ以外の場合は、 Value 属性にアスタリスク (*) を指定して、他の ExitCode 要素にリストされていない戻りコードを処理できます。

要素の情報

表 87 に 、ExitCode 要素に関する情報を示します。

表 87。 ExitCode 要素情報

Attribute
出現回数 ExitCodes 要素内の 0 個以上 (この要素は省略可能です)。
親要素 ExitCodes
コンテンツ 少なくとも 1 つの ExitCode 要素と 0 個以上の Error 要素
要素属性

表 88 に ExitCode 要素の属性を示し、それぞれの説明を示します。

表 88。 ExitCode 要素の属性と対応する値

Attribute 説明
状態 タスクの戻り状態を指定します。 この属性の値は、UDI ウィザードの対応するウィザード ページの [状態] 列に表示されます。 この属性には、タスクにとって意味のある任意の値を使用できます。 この属性に使用される一般的な値を次に示します。

-成功
-警告
-エラー
Text タスクの存在するコードに関する説明テキストを指定します。
Type この要素がエラー、警告、または成功を表すかどうかを指定します。 型で指定する値は 、ExitCodes 要素内で一意である必要があります。 この要素の有効な値を次に示します。

- 0. 要素は成功を表します。
- 1. 要素は警告を表します。
- -1。 要素はエラーを表します。
タスクが返したコードの値を数値として指定します。 アスタリスク (*) の値を指定すると、他の ExitCode 要素にリストされていない戻りコードの既定の要素が示されます。
注釈

なし。

なし。

ExitCodes

この要素は、Task または Error 要素の ExitCode 要素と Error 要素のセットをグループ化します。

要素の情報

表 89 に 、ExitCodes 要素に関する情報を示します。

表 89。 ExitCodes 要素情報

Attribute
出現回数 Task 要素内の 1 つ
親要素 タスク
コンテンツ エラーExitCode
要素属性

この要素には属性がありません。

注釈

なし。

なし。

フィールド

この要素は、XML をカスタマイズするために使用される Page 要素内のコントロールのインスタンスを指定します。 すべてのコントロールで XML を使用したカスタマイズが許可されているわけではありません。 Field 要素を使用するコントロールのみです。

要素の情報

表 90 に 、Field 要素に関する情報を示します。

表 90。 Field 要素情報

Attribute
出現回数 Field 要素内の 0 個以上 (この要素は省略可能です)。
親要素 フィールド
コンテンツ 既定値バリデーター
要素属性

表 91 に Field 要素の属性を示し、それぞれの説明を示します。

表 91。 Field 要素の属性と対応する値

属性 説明
Enabled (有効) ユーザー入力に対してフィールドを有効にするかどうかを指定します (属性を True または False に設定できます)。
名前 フィールドの名前を指定します
概要 このフィールドが設定する値の 概要 ウィザード ページに表示される説明テキストを指定します
VarName Field 要素の フィールドを使用して読み取りまたは構成されたタスク シーケンス変数名を指定します。
注釈

この要素には、0 個以上の Default 要素と 0 個以上の バリデーター要素を 含めることができます。

なし。

フィールド

この要素は、Page 要素内の個々の Field 要素をグループにします。

要素の情報

表 92 に 、Fields 要素に関する情報を示します。

表 92。 Fields 要素情報

Attribute
出現回数 Page 要素内の 0 個以上 (この要素は省略可能です)。
親要素 Page
コンテンツ フィールドRadioGroup
要素属性

この要素には属性がありません。

注釈

なし。

なし。

File

この要素は、Microsoftを使用したファイル コピー操作のソースとコピー先を指定します。Wizard.CopyFilesTask タスクの種類。 個別の File 要素を含め、1 つのタスクで複数のファイルをコピーできます。

要素の情報

表 93 に 、File 要素に関する情報を示します。

表 93. ファイル要素情報

Attribute
出現回数 タスクの種類がMicrosoftのタスクごとに 1 つ以上。Wizard.CopyFilesTask
親要素 タスク
コンテンツ None
要素属性

表 94 に File 要素の属性を示し、それぞれの説明を示します。

表 94。 File 要素の属性と対応する値

属性 説明
Dest Source 属性で指定されたファイルのコピー先フォルダーへの完全修飾パスまたは相対パスを指定します。 環境変数は、パスの一部として許可されます。
Source Microsoftソース ファイルへの完全修飾パスまたは相対パスを指定します。Wizard.CopyFilesTask タスクの種類がコピーされます。 この属性はワイルドカード文字をサポートしているため、1 つの File 要素を使用して複数のファイルをコピーできます。 環境変数は、パスの一部として使用できます。
注釈

なし。

なし。

Page

この要素は、ページのインスタンスを指定し、ページのすべての構成設定を含みます。

要素の情報

表 95 に 、Page 要素に関する情報を示します。

表 95. Page 要素情報

Attribute
出現回数 Pages 要素内の 1 つ以上
親要素 Pages
コンテンツ データフィールドセッタータスク
要素属性

表 96 に、Page 要素の属性を示し、それぞれの説明を示します。

表 96。 Page 要素の属性と対応する値

属性 説明
DisplayName UDI ウィザード デザイナーに表示されるウィザード ページのわかりやすい名前を指定します。 通常、この名前は Name 属性よりもわかりやすい名前です。
名前 UDI ウィザード デザイナーに表示されるウィザード ページの名前を指定します。
Type DLL 内の特定のウィザード ページに直接関連するウィザード ページの種類を指定します。
注釈

なし。

なし。

PageRef

この要素は、StageGroup 内の Stage 内のページのインスタンスへの参照を指定します。

要素の情報

表 97 に 、PageRef 要素に関する情報を示します。

表 97. PageRef 要素情報

Attribute
出現回数 Stage 要素内の 1 つ以上
親要素 ステージ
コンテンツ None
要素属性

表 98 に 、PageRef 要素の属性を示し、その説明を示します。

表 98。 PageRef 要素の属性と対応する値

属性 説明
Page StageGroup 内のステージ内のページのインスタンスを指定します。 この値を Page 要素の Name 属性に設定します。
注釈

なし。

なし。

ページ

この要素は、個々の Page 要素をグループ分けします。

要素の情報

表 99 に 、Pages 要素に関する情報を示します。

表 99。 Pages 要素情報

Attribute
出現回数 1 つ
親要素 ウィザード
コンテンツ Page
要素属性

この要素には属性がありません。

注釈

なし。

<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 個以上 (この要素は省略可能です)。
親要素 フィールド
コンテンツ Default
要素属性

表 101 に RadioGroup 要素の属性を示し、それぞれの説明を示します。

表 101。 RadioGroup 要素の属性と対応する値

属性 説明
ロック済み ユーザー入力に対してラジオ ボタンのグループを有効にするかどうかを指定します。 属性は、次のように設定できます。

- True。 ラジオ ボタンを無効にし、ユーザーがグループ内のラジオ ボタンを選択できないように指定します。
- False。 ラジオ ボタンを有効にし、ユーザーがグループ内のラジオ ボタンを選択できることを指定します。
名前 無線オプション グループの名前を指定します。
注釈

なし。

なし。

StageGroup

この要素は、デプロイ ステージ グループを指定します。

要素の情報

表 102 に 、StageGroup 要素に関する情報を示します。

表 102。 StageGroup 要素情報

Attribute
出現回数 StageGroups 要素内の 1 つ以上
親要素 StageGroups
コンテンツ ステージ
要素属性

表 103 に 、StageGroup 要素の属性と属性の説明を示します。

表 103。 StageGroup 要素の属性と対応する値

属性 説明
DisplayName UDI ウィザード デザイナーに表示されるステージ グループのわかりやすい名前を指定します。 通常、この名前は Name 属性よりもわかりやすい名前です。
注釈

なし。

なし。

StageGroups

この要素は、UDI ウィザード構成ファイル内のステージ グループのセットをグループ化します。

要素の情報

表 104 に 、StageGroups 要素に関する情報を示します。

表 104。 StageGroups 要素情報

Attribute
出現回数 Wizard 要素内の 0 または 1
親要素 ウィザード
コンテンツ StageGroup
要素属性

この要素には属性がありません。

注釈

なし。

なし。

セッター

この要素は、Property プロパティで名前が付けられたプロパティの値の プロパティ 設定を指定します。

要素の情報

表 105 に 、Setter 要素に関する情報を示します。

表 105。 Setter 要素情報

Attribute
出現回数 各親要素内の 0 個以上 (この要素は省略可能です)。
親要素 Data, DataItem, Page, Style, Task, Validator
コンテンツ Property 属性に文字列値が含まれています
要素属性

表 106 に Setter 要素の属性を示し、その説明を示します。

表 106。 Setter 要素の属性と対応する値

属性 説明
プロパティ 設定するプロパティ名を指定します。 プロパティ名は、この属性が角かっこで囲まれた値に設定されます。
注釈

なし。

なし。

ステージ

この要素は、 StageGroup 内の Stage を指定し、1 つ以上の PageRef 要素を 含みます。

要素の情報

表 107 に 、Stage 要素に関する情報を示します。

表 107。 Stage 要素情報

Attribute
出現回数 StageGroup 要素内の 1 つ以上
親要素 StageGroup
コンテンツ PageRef
要素属性

表 108 に Stage 要素の属性を示し、それぞれの説明を示します。

表 108。 Stage 要素の属性と対応する値

属性 説明
DisplayName UDI ウィザード デザイナーに表示されるウィザード ページのわかりやすい名前を指定します。 通常、この名前は Name 属性よりもわかりやすい名前です。
名前 ステージの名前を指定します。 この要素の値は、 /stage: name コマンド ライン パラメーターを使用して UDI ウィザードを起動するときに使用されます。
注釈

なし。

なし。

Style

この要素は、ウィザードの上部に表示されるタイトルや UDI ウィザードに表示されるバナー イメージなど、UDI ウィザードの外観を構成する個々の Setter 要素をグループ化します。

要素の情報

表 109 に、Style 要素に関する情報を示します。

表 109。 Style 要素情報

Attribute
出現回数 1 つ
親要素 ウィザード
コンテンツ セッター
要素属性

この要素には属性がありません。

注釈

なし。

<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 要素内の 1 つ以上
親要素 タスク
コンテンツ ExitCodesFileSetter
要素属性

表 111 に Task 要素の属性を示し、それぞれの説明を示します。

表 111。 Task 要素の属性と対応する値

属性 説明
DependsOn タスクが別のタスクに依存するかどうかを指定します。 この属性の値は、別の Task 要素の Name 属性に設定されます。 メモ: この属性は、UDI ウィザード デザイナーを使用して構成することはできません。 ただし、この属性を Task 要素に手動で追加するには、.xml ファイルを直接変更します。
DisplayName UDI ウィザード デザイナーに表示されるタスクのわかりやすい名前を指定します。 通常、この名前は Name 属性よりもわかりやすい名前です。
名前 タスクの名前を指定します。 この名前は一意である必要があります。
実行するタスクのタスクの種類を指定します。タスクを含む DLL で定義されます。
注釈

なし。

なし。

タスク

この要素は、 Page 要素の一連のタスクをグループ化します。

要素の情報

表 112 に 、Tasks 要素に関する情報を示します。

表 112。 Tasks 要素情報

Attribute
出現回数 Page 要素内の 0 または 1 (この要素は省略可能です)。
親要素 Page
コンテンツ タスク
要素属性

表 113 に Tasks 要素の属性を示し、それぞれの説明を示します。

表 113。 Tasks 要素の属性と対応する値

属性 説明
NameTitle 適切なウィザード ページのタスクの名前を含む列の上部に表示されるキャプションを指定します。
StatusTitle 適切なウィザード ページのタスクの状態を含む列の上部に表示されるキャプションを指定します。
注釈

なし。

なし。

バリデーター

この要素は、親 Field 要素で指定されているフィールド コントロールの検証コントロールを指定します。

要素の情報

表 114 に 、Validator 要素に関する情報を示します。

表 114。 Validator 要素情報

Attribute
出現回数 Field 要素内の 0 または 1
親要素 Field
コンテンツ セッター
要素属性

表 115 に 、Validator 要素の属性を示し、その説明を示します。

表 115。 バリデーター要素の属性と対応する値

属性 説明
検証コントロールを含む DLL で定義されている検証コントロールの型を指定します。
注釈

なし。

なし。

ウィザード

この要素は、他のすべての要素のルートを指定します。

要素の情報

表 116 に 、Wizard 要素に関する情報を示します。

表 116。 Wizard 要素情報

Attribute
出現回数 1 つ
親要素 None
コンテンツ DLLページステージ グループスタイル
要素属性

この要素には属性がありません。

注釈

なし。

<Wizard>  
   + <DLLs>  
   + <Style>  
   + <Pages>  
   + <StageGroups>  
</Wizard>