ユーザー駆動型インストール (UDI) は、Microsoft® System Center 2012 R2 Configuration Manager のオペレーティング システム展開 (OSD) 機能を使用して、Windows 8.1 などの Windows® クライアント オペレーティング システムのコンピューターへの展開を簡略化するのに役立ちます。 UDI は、Microsoft Deployment Toolkit (MDT) の一部です。
概要
通常、OSD 機能を使用してオペレーティングシステムを展開する場合は、オペレーティングシステムの展開に必要なすべての情報を提供する必要があります。 情報は、構成ファイルまたはデータベース (CustomSettings.ini ファイルや MDT データベース [MDT DB] など) で構成されます。 配置を開始する前に、すべての構成設定を指定する必要があります。
UDI は、配置を実行する直前に構成情報を提供できるウィザード駆動型のインターフェイスを提供します。 この動作により、汎用 OSD タスク シーケンスを作成し、展開時にコンピューター固有の情報を提供できるため、展開プロセスの柔軟性が向上します。
対象プレイヤー
このガイドは、UDI Wizard のカスタム ウィザード ページと UDI Wizard Designer のカスタム ウィザード ページ エディタを作成する開発者向けに記述されています。 このガイドは、以下を使用して Windows アプリケーションの開発に精通していることを前提としています。
C++ (カスタム ウィザード ページの作成に使用)
Microsoft .NET Framework - カスタム ウィザード ページ エディターの作成に使用されます
Windows Presentation Foundation (WPF) は、カスタム ウィザード ページ エディターを作成するために使用されます
WPF でサポートされている言語 (C#、C++、Microsoft Visual Basic® .NET など) で、ウィザードのカスタム ページ エディターの作成に使用されます
このガイドについて
このガイドでは、UTI を organization に合わせてカスタマイズするために必要な参照情報を提供します。 このガイドでは、MDT (UDI を含む) のインストール、オペレーティング システムとアプリケーションを展開するための UDI の構成、UDI ウィザードを使用した展開の実行など、管理上または運用上のトピックについては説明しません。 これらのトピックの詳細については、MDT に含まれている「 Microsoft Deployment Toolkit の使用」の UDI トピックを参照してください。
UDI 開発の概要
UDI 開発では、UDI が提供する機能を拡張できます。 通常、UDI 展開プロセスによって消費される追加情報を収集する場合は、UDI 開発が必要です。 この追加情報は通常、Configuration Manager の UDI タスク シーケンスのタスク シーケンス ステップが読み取るタスク シーケンス変数として保存されます。
UDI アーキテクチャ
UDI 開発の高レベルの目標は、UDI ウィザードに表示できるカスタム ウィザード ページを作成することです。 カスタム ウィザード ページを作成することで、UDI の既存の機能を拡張して、organization のビジネス要件や技術要件を満たすことができます。 カスタム ウィザード ページは、UDI が提供するウィザード ページに加えて、またはその代わりに情報を収集します。
図 1 は、UDI Wizard Designer と UDI Wizard の関係を示しています。
図 1。 UDI ウィザードと UDI ウィザード Designer の関係
図 1. UDI ウィザードと UDI ウィザード Designer の関係
概念レベルでは、UDI 開発には以下の作成が含まれます。
カスタム ウィザード ページ。 ウィザード ページは UDI ウィザードに表示され、展開プロセスを完了するために必要な情報を収集します。 Microsoft Visual Studio® で C++ を使用してウィザード ページを作成します。 カスタム ウィザード ページは、UDI ウィザードが読み取る DLL として実装されます。 UDI ソフトウェア開発キット (SDK) には、カスタム ウィザード ページを作成する方法の例が含まれています。
カスタム ウィザード ページ エディター。 ウィザード ページ エディターを使用して、カスタム ウィザード ページの動作を構成します。 カスタム ウィザード ページ エディターは、UDI ウィザード Designer が読み込む DLL として実装されます。 ウィザード ページ エディターは、以下を使用して作成します。
WPF バージョン 4.0
Microsoft Prism バージョン 4.0
Microsoft Unity Application Block (Unity) バージョン 2.1
MDT には、UDI ウィザード Designer で使用するカスタム ウィザード ページ エディターを作成するために必要なすべてのアセンブリが含まれています。 UDI SDK には、カスタム ウィザード ページ エディターを作成する方法の例が含まれています。
さらに、UDI Wizard Designer は、サポートするウィザード ページ エディター構成ファイルを消費します。 ウィザード ページ エディター構成ファイルは、カスタム ウィザード ページおよびカスタム ウィザード ページ エディターを作成するプロセスの一部として作成します。 UDI ウィザードDesigner、UDI ウィザード構成ファイルおよび対応する .app ファイルに必要な XML 情報が作成されます。
UDI 開発環境の準備
独自のカスタム ウィザード ページとウィザード ページ エディターの作成を開始する前に、次の手順を実行して UDI 開発環境を準備します。
UDI 開発環境の前提条件の準備で説明されているように、UDI 開発環境の前提条件を準備します。
UDI 開発環境が「UDI 開発環境の検証」で説明されているように正しく構成されていることを確認します。
UDI 開発環境の準備 前提条件
UDI 開発環境の前提条件を準備するには、次の手順を実行します。
UDI 開発環境ハードウェアの前提条件の準備で説明されているように、 UDI 開発環境ハードウェアの特典を準備します。
UDI 開発環境ソフトウェアの前提条件の準備で説明されているように、UDI 開発環境ソフトウェアの特典を準備します。
UDI 開発環境ハードウェアの前提条件を準備する
UDI 開発環境のハードウェアの前提条件は、使用している Microsoft Visual Studio のエディションのハードウェア要件と同じです。 これらの要件の詳細については、 Visual Studio ドキュメントの各エディションのシステム要件を参照してください。
UDI 開発環境ソフトウェアの前提条件を準備する
UDI 開発環境には、次のソフトウェア前提条件があります。
Visual Studio 2010 がサポートするすべての Windows オペレーティング システム (Windows 7 または Windows Server ® 2008 R2 をお勧めします)。
開発対象のプロセッサ アーキテクチャをサポートする Windows オペレーティング システムが必要です。 64 ビットのオペレーティング システムを使用して、32 ビットおよび 64 ビットの UDI 開発を実行できます。 32 ビット UDI 開発は、32 ビット オペレーティング システムでのみ行います。 このため、64 ビット オペレーティング システムを使用する必要があります。
注:
Windows オペレーティング システムの IntelItanium バージョン (IA-64) は、UDI 開発環境ではサポートされていません。
Visual Studio 2010 でサポートされているオペレーティング システムの詳細については、 Visual Studio ドキュメントの各エディションのシステム要件を参照してください。
Microsoft .NET Framework バージョン 4.0 (Visual Studio 2010 で必要)
C++ 言語 (UDI ウィザード ページの拡張に使用される言語)
UDI ウィザード Designer ウィザードのページ エディターを拡張するために使用される、C#、Visual Basic .NET、C++/共通言語インフラストラクチャなど、WPF でサポートされている他の言語
注:
UDI ウィザード Designer ウィザードのページ エディターのサンプル ソース コードは、C# で記述されています。 サンプル ソース コードを使用する場合は、C# 言語をインストールします。
UDI 開発環境の構成
UDI 開発環境の前提条件が満たされたら、次の手順を実行して UDI 開発環境を構成します。
Visual Studio 2010 をインストールします。
C++ 言語と、WPF がサポートする他の言語がインストールされていることを確認します。
注:
UDI ウィザードの Designer エディター ページのサンプル ソース コードは、C# で記述されています。 サンプル ソース コードを使用する場合は、C# 言語をインストールします。
Visual Studio 2010 のインストールの詳細については、「 Visual Studio のインストール」を参照してください。
MDT をインストールします。
MDT をインストールする方法の詳細については、MDT の文書「 Microsoft Deployment Toolkit の使用」の「MDT のインストールまたはアップグレード」セクションを参照してください。
Windows エクスプローラー で、local_folderを作成します (local_folder は開発コンピューターのローカル ドライブにあるフォルダー)。
installation_folder\SDK フォルダーを local_folder にコピーします (installation_folder は MDT をインストールしたフォルダー、local_folder は開発コンピューターのローカル ドライブにあるフォルダーです)。
MDT は Program Files フォルダーにインストールされるため、SDK フォルダーを別の場所にコピーします。このフォルダーには、管理者特権のアクセス許可がないと書き込むことができません。 SDK フォルダーを別の場所にコピーすると、昇格されたアクセス許可を必要とせずに SDK フォルダー内のファイルを変更できます。
installation_folder\Templates\Distribution\Tools フォルダーを local_folder にコピーします (installation_folder は MDT をインストールしたフォルダーで、local_folder は手順の前に作成したフォルダーです)。
local_folder\Tools フォルダーの名前を local_folder\OSDSetupWizard に変更します (local_folder はプロセスの前に作成したフォルダーです)。
完成すると、 local_folder の下にあるフォルダー構造は図 2 に示すフォルダー構造のようになります ( ここでlocal_folder はプロセスの前に作成したフォルダーで、図では UDIDevelopment として示されています)。
図 2. UDI 開発用のフォルダー構造図 2. UDI 開発用のフォルダー構造
UDI 開発環境の検証
UDI 開発環境が構成されている場合は、サンプル プロジェクトが Visual Studio 2010 で正しくビルドされることを確認して、UDI 開発環境が正しく構成されていることを確認します。
次のいずれかを判断して、UDI 開発環境が正しく構成されていることを確認します。
SamplePage プロジェクトが正しくビルドされることの確認の説明に従って、SamplePage プロジェクトが正しくビルドされます
SampleEditor プロジェクトは、「SampleEditor プロジェクトが正しくビルドされることを確認する」の説明に従って正しくビルドされます
SamplePage プロジェクトが正しくビルドされることを確認する
SamplePage プロジェクトでは、UDI ウィザードのカスタム ウィザード ページを作成する方法の例を示します。 SamplePage プロジェクトの詳細については、「 SamplePage Visual Studio ソリューションのレビュー」を参照してください。
SamplePage プロジェクトが正しくビルドされることを確認するには
Visual Studio 2010 を起動します。
SamplePage プロジェクトを開きます。
SamplePage プロジェクトは、 local_folder\SDK\UDI\SamplePage フォルダーにあります ( local_folder はプロセスの前に作成したフォルダーです)。
Visual Studio 2010 のソリューション エクスプローラーで、SamplePage プロジェクトを右クリックし、[プロパティ] を選択します。
[ SamplePage プロパティ ページ] ダイアログ ボックスが表示されます。
[ SamplePage プロパティ ページ ] ダイアログ ボックスで、[構成プロパティ/デバッグ] に移動します。
[デバッグ プロパティ] の [構成] で、[ すべての構成] を選択します。
[デバッグ プロパティ] の [コマンド] に「$(TargetDir)\OSDSetupWizard.exe」と入力します。
[デバッグ プロパティ] の [作業ディレクトリ] に「 $(TargetDir)」と入力します。
[ SamplePage プロパティ ページ] ダイアログ ボックスで、[構成プロパティ]、[ビルド イベント]、[ビルド後イベント] の順に移動します。
[ビルド後イベントのプロパティ] の [ コマンド ライン] で、次のように入力します。
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"[ SamplePage プロパティ ページ ] ダイアログ ボックスで、[ OK] を選択します。
プロジェクトを保存します。
[ デバッグ] メニューから、[ デバッグの開始] を選択します。
[ Microsoft Visual Studio] ダイアログ ボックスが表示され、ソースが古くなっていることを示し、プロジェクトをビルドするかどうかを確認するメッセージが表示されます。
[ Microsoft Visual Studio ] ダイアログ ボックスで、[ はい] を選択します。
[ デバッグ情報がありません ] ダイアログ ボックスが表示され、OSDSetupWizard.exe に使用できるデバッグ情報がないことが通知されます。
[ デバッグ情報なし] ダイアログ ボックスで、[ はい] を選択します。
UDI ウィザードが開き、カスタム ウィザード ページが表示されます。
[ 場所の選択] で値を選択できることを確認します。
サンプル ページ フォームを含むウィザードで、[キャンセル] を選択します。
[ ウィザードのキャンセル ] ダイアログ ボックスが表示されます。
[ ウィザードのキャンセル ] ダイアログ ボックスで、[ はい] を選択します。
Visual Studio 2010 を終了します。
SampleEditor プロジェクトが正しくビルドされることを確認する
SampleEditor プロジェクトでは、UDI Wizard Designer 用のカスタム ウィザード ページ エディターを作成する方法の例が提供されます。 SampleEditor プロジェクトの詳細については、「 SamplePage Visual Studio ソリューションのレビュー」を参照してください。
SampleEditor プロジェクトが正しくビルドされたことを確認するには
Visual Studio 2010 を起動します。
SampleEditor プロジェクトを開きます。
SampleEditor プロジェクトは、 local_folder\SDK\UDI\SampleEditor フォルダーにあります ( local_folder はプロセスの前に作成したフォルダーです)。
Visual Studio 2010 のソリューション エクスプローラーで、SampleEditor プロジェクトを選択します。
[ プロジェクト ] メニューから [ 参照の追加] を選択します。
「 参照を追加 」(Add Reference) ダイアログボックスが開きます。
[ 参照の追加 ] ダイアログ ボックスで、[ 参照 ] タブを選択します。
[ 参照 ] タブで、 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 キーを押しながらファイルを選択します。
ソリューション エクスプローラーで、[SampleEditor/References] に移動します。
どの参照にも警告またはエラーが含まれていないことを確認します。
ソリューション エクスプローラーで、SampleEditor プロジェクトを右クリックし、[プロパティ] を選択します。
[ SampleEditor プロパティ ページ ] ダイアログ ボックスが表示されます。
[ SampleEditor プロパティ ページ ] ダイアログ ボックスの [ デバッグ ] タブを選択します。
[ デバッグ] タブで、[ 外部プログラムの開始] を選択します。
[ 外部プログラムの開始] で、「 installation_folder\Bin\UDIDesigner.exe 」( installation_folder は MDT をインストールしたフォルダー)と入力し、[ OK] を選択します。
ヒント
省略記号 (...) ボタンを選択してフォルダーを参照し、[UDIDesigner.exe] を選択できます。
[ ファイル ] メニューの [ すべてを保存] を選択します。
local_folder\SDK\SamplePage\SamplePage.dll.config ファイルを installation_folder\Bin\Config フォルダーにコピーします (local_folder は構成プロセスの初期で開発コンピューター上に作成したフォルダーで、installation_folder は MDT をインストールしたフォルダーです)。
Visual Studio 2010 では、[ デバッグ] メニューの [ デバッグの開始] を選択します。
UDI ウィザード Designer が起動します。
UDI ウィザード Designer のリボンで、[開く] を選択します。
[開く] ダイアログ ボックスが表示されます。
[ 開く] ダイアログ ボックスで、 local_folder\SDK\SamplePage\SamplePage\Config.xml ファイルを開きます ( local_folder は構成プロセスの初期で開発コンピューターに作成したフォルダーです)。
Config.xml ファイルが開き、カスタム ステージグループ が詳細ウィンドウに表示されます。
詳細ウィンドウで、[ 構成 ] タブを選択します。
次の内容を含む [ 場所] ボックスの設定情報を確認します。
[場所] ボックスを有効または無効にするロック解除ボタン
[場所] ボックスに表示される既定値を入力する既定値ボックス
概要ページに表示されるわかりやすい表示名。ここで、[概要] ページに表示される情報のキャプションを入力します
場所リスト ボックス。場所と考えられる場所の一覧が含まれています
UDI ウィザード Designer を閉じます。
Visual Studio 2010 を終了します。
UDI SDK サンプルの確認
開発を開始する前に、UDI SDK で提供されている例を確認してください。 このガイドの情報と例のソース コードを使用すると、独自の UDI カスタム ウィザード ページとウィザード ページ エディターを作成できます。
以下を確認して、UDI SDK の例を確認します。
「SDK フォルダーの内容の確認」で説明されているように、インストール プロセスの初期でコピーした SDK フォルダーの内容
SamplePage Visual Studio ソリューションの確認で説明されているカスタム UDI ウィザード ページの例
SampleEditor Visual Studio ソリューションのレビューで説明されているカスタム UDI ウィザード ページ エディターの例
SDK フォルダーの内容を確認する
UDI 開発環境の構成時に、MDT をインストールしたフォルダーから作成した別のフォルダーに SDK フォルダーをコピーしました。 表 1 に、SDK フォルダーのすぐ下のフォルダーと、各フォルダーの簡単な説明を示します。
表 1. UDI SDK のフォルダー
| Folder | このフォルダーには、 |
|---|---|
| Includes | UDI ウィザードのカスタム ウィザード ページを作成するために必要な C++ ヘッダー ファイル |
| ライブラリ | カスタム ページにリンクされる C++ ライブラリ ファイル。静的リンク ライブラリには、32 ビット版と 64 ビット版があります。 メモ: Itanium バージョンのライブラリ (IA-64) は使用できません。 |
| SampleEditor | UDI ウィザード Designer で SamplePage ページを編集するために使用されるカスタム エディターを構築するための Visual Studio プロジェクトで、C 言語で記述されています# |
| SamplePage | Visual C++ で記述されたカスタム UDI ウィザード ページを構築するための Visual Studio プロジェクト |
SamplePage Visual Studio ソリューションのレビュー
カスタム ウィザード ページとウィザード ページ エディターの作成を開始する前に、次のタスクを実行して UDI 開発環境を準備します。
ウィ ザード ページのライフ サイクルの確認で説明されているように、UDI ウィザード ページのライフ サイクルの段階を確認します。
「 SamplePage の例を確認する」で説明されているように、UDI SDK の SamplePage サンプルに関する Visual Studio ソリューションを確認します。
ウィザード ページのライフ サイクルを確認する
UDI ウィザード ページには、ページのライフ サイクルの各ステージ (またはフェーズ) に対応するメソッドがあります。 カスタム ウィザード ページの作成の一環として、これらのメソッドをコードでオーバーライドする必要があります。 表 2 に、オーバーライドする必要があるメソッドと、ウィザード ページ ライフサイクルでの使用状況など、各メソッドの簡単な説明を示します。
表 2. ウィザード ページのライフ サイクルのメソッド
| メソッド | 説明 |
|---|---|
| OnWindowCreated | このメソッドは、ページのウィンドウが作成された後に 1 回呼び出されます。 この方法では、ページを初めて初期化し、1 回だけ実行する必要があるコードを記述します。 たとえば、このメソッドを使用して、フィールドを初期化したり、UDI ウィザード構成ファイルの Setter 要素から構成情報を読み取ったりします。 |
| OnWindowShown | このメソッドは、UDI ウィザードにページを表示 (表示) するたびに呼び出されます。 これは、ページを初めて表示したとき、およびウィザードで [ 次へ ] または [戻る] を選択してページに移動するたびに呼び出されます。 このメソッドでは、表示するページを準備するコードを記述します。たとえば、メモリ変数、タスク シーケンス変数、または環境変数を読み取り、それらの変数への変更に基づいてページを更新します。 |
| OnCommonControlEvent | このメソッドは、ウィザード ページが表示され、子 (通常は共通コントロール) からWM_NOTIFY メッセージを受信したときにいつでも呼び出すことができます。 この方法では、通知メッセージに基づいてWM_NOTIFYを処理するコードを記述します。 たとえば、 TreeView コントロールの選択イベントやダブルクリック イベントなど、共通のコントロールからのイベントに応答することができます。 |
| OnUnhandledEvent | このメソッドは、ウィザード ページでハンドルされないウィンドウ メッセージが発生すると呼び出されます。 このメソッドは、これらの他の方法では処理されないウィンドウ メッセージをインターセプトして処理する機会を提供します。 このメソッドでは、ウィザード ページに関連するウィンドウ メッセージを処理するコードを記述します。 通常、このメソッドをオーバーライドする必要はありません。 |
| OnNextSelected | このメソッドは、ウィザードで [次へ ] を選択すると呼び出されます。 この方法では、次のウィザード ページに移動する前に必要な操作を実行するコードを記述します。たとえば、時間がかかる可能性のある検証を実行します。 検証が失敗した場合は、 Next 要求を取り消してメッセージを表示できます。 |
| OnWindowHidden | このメソッドは、前または次のウィザード ページが表示されているときにページが非表示になるたびに呼び出されます。 この方法では、ページが非表示になる前、別のページが表示される前に、任意の操作を実行するコードを記述します。 通常、このメソッドをオーバーライドする必要はありません。 |
SamplePage の例を確認する
次のリストを使用して SamplePage の例を確認します。これは、SamplePage 例のウィザード ページのライフ サイクル中のイベントのシーケンスを表しています。
UDI ウィザード (OSDSetupWizard.exe) は、「 手順 1: UDI ウィザード (OSDSetupWizard.exe) が Config.xml ファイルを読み取る」で説明したように、例の UDI ウィザード構成ファイル (Config.xml ファイル) から構成情報を読み取ります。
UDI ウィザードは、「 手順 2: UDI ウィザードがカスタム ウィザード ページの DLL を読み込む」で説明されているように、UDI ウィザード構成ファイルに一覧表示されている各ウィザード ページに必要な DLL を読み込みます。
UDI ウィザードにカスタム ウィザード ページが表示され、「 手順 3: UDI ウィザードでカスタム ウィザード ページが表示される」で説明されているように、必要なコントロール操作が可能になります。
カスタム ウィザード ページで情報が収集されたら、「手順 4: カスタム ウィザード ページで [次へ] ボタンが選択される」で説明されているように、[次へ] を選択する前に必要なタスクを実行して次のウィザードに進みます。
手順 1: UDI ウィザード (OSDSetupWizard.exe) が Config.xml ファイルを読み取る
UDI ウィザード (OSDSetupWizard.exe) が起動すると、既定では、UDI ウィザードのプライマリ構成ファイルである UDIWizard_Config.xml ファイルである UDI ウィザード構成ファイルが読み取られます。
注:
この例では、構成ファイルとして Config.xml ファイルを使用します。 MDT では、既定の構成ファイルは構成用の MDT Files パッケージの Scripts フォルダーにある UDIWizard_Config.xml ファイルです。
/definition パラメーターを使用するように UDI ウィザードのタスク シーケンスのステップを変更することにより、UDI ウィザードで使用される既定の構成ファイルをオーバーライドできます。 UDI ウィザードで使用される既定の構成ファイルをオーバーライドする方法の詳細については、「UDI ウィザードで使用される構成ファイルをオーバーライドする」を参照してください。
Config.xml ファイルの最上位の要素は次のとおりです。
DLL 要素
StageGroups 要素
UDI ウィザード構成ファイルとこれらの各要素のスキーマの詳細については、「 UDI ウィザード構成ファイル スキーマ リファレンス」を参照してください。
UDI ウィザードは、 DLL 要素をスキャンして読み込む .dll ファイルを探します。 この例では、SamplePage.dll と SharedPages.dll という 2 つの .dll ファイルが一覧表示されます。 これらの .dll ファイルは、OSDSetupWizard.exe と同じフォルダー、つまり Tools\platform フォルダー (32 ビット バージョンの場合は x86、64 ビット バージョンの場合は x64) に存在する必要があります。
UDI ウィザードは、 Pages 要素をスキャンして、定義されているページを探します。 この例では、 Custom と SummaryPage の 2 つのページが定義されています。 Page 要素の Type 属性は PageClassIDs.h ファイルで定義され、カスタム ページの種類を一意に定義します。
この例では、定義されている型は Microsoft.SamplePage.LocationPage です。 カスタム ページは、将来作成する可能性のある他のページとの潜在的な競合を避けるために、以下に置き換えます。
Microsoft の代わりに organization 名。
SamplePage の代わりにプロジェクト名を付けます。
LocationPage の代わりにカスタム ウィザード ページ名を指定します。
手順 2: UDI ウィザードがカスタム ウィザード ページの DLL を読み込む
UDI ウィザードは、DLL を読み込むときに、.dll ファイルに実装する必要がある RegisterFactories 関数を呼び出します。 この例では、この関数は dllmain.ccp ファイルに実装されています。 作成する各ウィザード ページには、 RegisterFactories 関数を実装する必要があります。
RegisterFactories 関数は、ウィザード ページのファクトリ クラスを UDI ウィザードのクラス ファクトリ レジストリに登録するために使用されます。 クラス ファクトリ は、別のクラスのインスタンスを作成できるクラスです。 RegisterFactories 関数は、ファクトリ クラスの新しいインスタンスを作成し、そのクラスを UDI ウィザードのクラス ファクトリ レジストリに渡すと、そのファクトリ クラスをウィザードで使用できるようになります。 UDI ウィザードは、カスタム ウィザード ページの Page 要素の Type 属性に一致する ID で登録されているファクトリ クラスを検索します。
この例では、ID は PageClassIds.h ファイルで Microsoft.SamplePage.LocationPage としてID_Locationとして定義されています。これは、Config.xml ファイルの Page 要素の Type 属性と一致します。 ID_Location は、dllmain.ccp ファイルに実装されている RegisterFactories 関数のパラメーターとして渡されます。
Register_name 関数テンプレートを使用して関数を作成し、新しいファクトリ インスタンスの作成を簡略化し、新しく作成したインスタンスを登録できます。 登録関数テンプレートを使用して指定される 名前 値は、 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という名前のデータ要素と関連付けます。
AddField メソッドに加えて、AddRadioGroup メソッドと AddToGroup メソッドを使用して、他のコントロールと動作をサポートできます。
注:
InitFields メソッドを呼び出す前に、必ず AddField、AddRadioGroup、または AddToGroup メソッドを呼び出してください。
InitFields. このメソッドを使用して、フォームに追加したフィールド (コントロール) を初期化します。 ページのポインターはパラメーターです。 この例では、現在のページを参照する this ポインターが渡されます。
注:
このポインターの使用をサポートするには、WizardPageImpl テンプレート クラスがサポートするインターフェイスに加えて、IFieldCallback インターフェイスを実装する必要があります。
IFieldCallback インターフェイスは、テキスト ボックス コントロールとチェック ボックス コントロール以外のコントロールの既定値を設定するために使用される SetFieldDefault メソッドを呼び出します。 この例の SetFieldDefault メソッドは、Config.xml ファイルの Field 要素の Default 要素で指定されている既定値に基づいて、コンボ ボックス コントロールの初期インデックスを設定します。
OnWindowCreated メソッドは、IFormController インターフェイスを使用してフォーム コントローラーを設定します。 フォーム コントローラーの設定の詳細については、「 フォームの設定」を参照してください。
InitLocations. このメソッドは、Config.xml ファイル内の場所の一覧からコンボ ボックスを設定します。 Confg.xml ファイルの Data 要素と子 DataItem 要素は、使用可能な値の一覧を提供します。
OnNextSelected. このメソッドでは、次のタスクを実行します。
Updates SaveFields メソッドを使用して、コンボ ボックスで選択した値で TSLocation タスク シーケンス変数を更新します
SaveFields メソッドを使用して、[概要] ページに表示される情報を追加します
手順 4: [カスタム ウィザード] ページで [次へ] ボタンが選択される
ユーザーがカスタム ウィザード ページでフィールドを完了すると、[ 次へ] を選択します。これにより、 OnNextSelected メソッドが呼び出されます。 OnNextSelected メソッドは、次のウィザード ページに進む前に必要なタスクを実行します (カスタム ウィザード ページで行われた構成の変更を記録するなど)。
カスタム ウィザード ページの例では、 OnNextSelected メソッドのオーバーライドが LocationPage.ccp ファイルに実装されています。 カスタム ウィザードの例ページの OnNextSelected メソッドでは、次のメソッドが呼び出されます。
InitSection を使用します。 このメソッドは、[概要] ページに表示される概要データのヘッダー (ラベル キャプション) を初期化します。 通常、 この値は DisplayName() 関数を使用して設定できます。 このキャプションに関連付けられているデータは、SaveFields メソッドを使用して保存されます。
SaveFields. このメソッドは、フィールド値をタスク シーケンスの変数と [概要] ページに表示されるデータに保存します。
SampleEditor Visual Studio ソリューションのレビュー
独自のカスタム ウィザード ページとウィザード ページ エディターの作成を開始する前に、次の手順を実行して UDI 開発環境を準備します。
UDI Wizard Designer のアーキテクチャの確認で説明されているように、UDI Wizard Designer のアーキテクチャを確認します。
UDI ウィ ザード ページの構成可能なコンポーネントの確認で説明されているように、UDI ウィザード構成ファイルを使用してカスタマイズできる UDI ウィザード ページのコンポーネントを確認します。
「 EditorPage サンプルの確認」で説明されているように、UDI SDK で提供されている EditorPage サンプルを確認します。
UDI ウィザードの Designer アーキテクチャを確認する
UDI Wizard Designer は、WPF、Prism、および Unity を使用して開発されました。 UDI Designerは、UDI ウィザード構成ファイル (UDIWizard_Config.xml) を編集するために使用され、UDI ウィザード (OSDSetupWizard.exe) は実行時にこのファイルを読み取ります。 UDI ウィザード構成ファイルの Pages 要素には、ウィザード ページごとに個別の Page 要素を持つページのリストが含まれています。
ウィザード ページの構成設定を編集すると、UDI ウィザード Designer はウィザード ページの種類に対応するカスタム ページ エディターを読み込みます。 カスタム ウィザード ページ エディターは、WPF ユーザー コントロールとして開発されました。 カスタム ウィザード ページ エディター ページでは、WPF の Model-View-ViewModel (MVVM) デザイン パターンが使用されます。
MVVM 設計パターンは、ユーザー インターフェイス (UI、プレゼンテーション) を表示されるデータから分離するのに役立ちます。 データは、UDI ウィザード構成ファイル (例では Config.xml ファイル) の Page 要素の外観であり、IDataService インターフェイスの CurrentPage プロパティを使用してアクセスします。
UDI ウィザード Designer は、DependencyAttribute を使用して、Unity の依存関係注入フレームワークに基づいて DataService クラスへのアクセスを取得します。 Unity の依存関係間投詞フレームワークの詳細については、「Inject Some Life to Your Applications—Getting to know the Unity Application Block」を参照してください。
UDI ウィザード ページの構成可能なコンポーネントの確認
カスタム ウィザード ページを作成する際、一部の構成設定はコードで設定され、ページのコンパイル後に変更することはできません。 ただし、他の構成設定については、UDI ウィザード Designer を使用してそれらの構成設定を変更できるようにする必要があります。
通常、UDI ウィザード Designerを使用して構成する構成設定は、UDI ウィザード構成ファイル (例の Config.xml ファイル) に保存されます。 ただし、必要に応じて、独自の個別の構成ファイルを作成することもできます。 別の構成ファイルを使用する例の 1 つは、UDIWizard_Config.xml.app ファイルです。これは、 Application Discovery タスクおよび ApplicationPage ウィザードのページ タイプで使用されるものです。
UDI ウィザード Designer を使用して管理できる一般的な構成設定の一覧を以下に示します。
フィールド。 Use fields を使用すると、ユーザーは入力を提供できます。 フィールドは、UDI ウィザード構成ファイル (UDIWizard_Config.xml) では フィールド要素として 表示されます。このファイルには、各フィールドの構成設定が含まれています。 対応するウィザード ページ エディターでは、 FieldElementControl を使用してフィールドのフィールド構成設定を編集するためのメソッドを提供する必要があります。
Properties。 セッターは、ページ要素のページ、フィールド要素のフィールド、Data 要素や DataItem 要素のデータなど、ページ上のエンティティのプロパティの作成に役立ちます。 プロパティは、 セッター 要素で構成します。 定義するプロパティごとに個別の Setter 要素を追加します。 SetterControl を使用してプロパティを編集し、他のコントロールを使用して他の Setter 要素を構成します。
データ。 データは、ウィザード ページおよびその他のコンポーネントで使用する情報を格納するために使用されます。 Data または DataItem 要素を使用して、ページまたはフィールドのデータを定義できます。 データは、 Data 要素または DataItem 要素を適切に使用することで、フラット構造または階層構造で定義できます。 SDK の例の Config.xml は、フラットなデータ構造を構築する方法を示しています。
作成するカスタム ウィザード ページ エディターは、これらの構成設定を管理できる必要があります。
EditorPage の例を確認します
EditorPage の例は、UDI ウィザード構成ファイル内の SamplePage ウィザード ページの構成設定を構成するために使用されます。 EditorPage の例には、次の主要なコンポーネントが含まれています。
場所のコンボ ボックス設定を構成する UI
[ 場所 ] コンボ ボックスに表示される使用可能な場所の一覧に場所を追加または編集する UI
UDI ウィザード構成ファイルから読み取って保存する構成設定
他のコンポーネントのサポート コード
次の手順を実行して、Visual Studio の EditorPage サンプルを確認します。
UDI ウィザード Designer で SampleEditor ページ エディターの読み込みと初期化の方法を確認します 「ウィザードのページ エディターの読み込みと初期化の確認」で説明されているように。
「場所コンボ ボックスの構成に使用するユーザー インターフェイスを確認する」で説明されているように、LocationPageEditor.xaml ファイルおよびLocationPageEditor.xaml.cs ファイルで場所コンボ ボックスの編集に使用される UI を確認します。
AddEditLocationView.xaml および AddEditLocationView.xaml.cs ファイルのリストに場所を追加または編集するために使用される UI を確認します。「 使用可能な場所の一覧の変更に使用するユーザー インターフェイスを確認する」で説明しています。
UDI ウィザード構成ファイルに保存されている構成情報を管理するために使用されるコードについては、「 構成情報の管理に使用されるコードを確認する」で説明されているとおり、確認します。
レビュー ウィザードのページ エディターの読み込みと初期化
カスタム ウィザード ページ エディターは、UDI ウィザード Designer で必要に応じて読み込まれます。 UDI Wizard Designer の構成ファイルは、UDI Wizard Designer の起動時に読み込まれます。 UDI ウィザードDesigner、install_folder\Bin\Config フォルダー (install_folder は MDT がインストールされているフォルダーの名前) をスキャンし、.config ファイル拡張子を持つファイルを探します。
UDI 開発環境の構成時に、SamplePage.dll.confg ファイルを install_folder\Bin\Config フォルダーにコピーしました。 UDI ウィザード Designerを起動すると、SamplePage.dll.confg ファイルが見つかり、読み込まれます。
UDI ウィザードDesigner、SamplePage.dll.confg ファイル内の Page 要素の次の属性を使用して、EditorPage サンプルを読み込み、初期化します。
DesignerAssembly. この属性は、読み込まれる DLL の名前を決定します。 この DLL は、UDIDesigner.exe ファイルと同じフォルダー、つまり install_folder\Bin フォルダー ( install_folder は MDT がインストールされているフォルダーの名前) に配置する必要があります。
DesignerType. この属性は、WPF ユーザー コントロールを含むクラスの Microsoft .NET 型の名前です。
タイプ。 この属性を使用して、UDI ウィザードが読み込むカスタム ウィザード ページのページの種類を構成します。 UDI ウィザード Designer は、この属性を使用して、UDI ウィザード構成ファイル内の適切な Page 要素を見つけます。
Dll. この属性を使用して、UDI ウィザード構成ファイルで DLL 要素を構成します。このファイルは UDI ウィザード Designer によって作成されます。
説明。 この属性を使用して、ウィザード・ページ・エディターに関する情報を提供します。 この属性の値は、UDI ウィザード Designer の [新しいページの追加] ダイアログ ボックスに表示されます。これは、「ページ ライブラリ」にウィザード ページを追加するために使用されます。
DisplayName. この属性を使用して、UDI ウィザード Designer に表示されるカスタム ウィザード ページの名前を指定します。 この属性の値は、UDI ウィザード Designer の [新しいページの追加] ダイアログ ボックスに表示されます。これは、「ページ ライブラリ」にウィザード ページを追加するために使用されます。
この例では、 SamplePage カスタム ウィザード ページの種類は Microsoft.SamplePage.LocationPage で、Config.xml ファイルに保存されます。 Config.xml ファイルは、 local_folder\SDK\SamplePage\SamplePage フォルダーにあります ( local_folder は構成プロセスの初期で開発用コンピューターで作成したフォルダーです)。
場所のコンボ ボックスを構成するために使用するユーザー インターフェイスを確認します
ウィザード ページ エディターが読み込まれて初期化されると、 Microsoft.SamplePage.LocationPage の種類を持つページが編集されたときに SampleEditor ウィザード ページ エディターが読み込まれます。 ページ エディターの UI は、LocationPageEditor.xaml ファイルに格納されます。
[ デザイン ] タブの UI と [XAML ] タブのコードを調べると、グラフィカル UI と XAML (Extensible Application Markup Language) の要素と属性との関係がわかります。
たとえば、XAML の Controls:FieldElementControl 要素を確認すると、対応する UI のレイアウトにそれらがどのように関連しているかがわかります。 Controls:FieldElementControl 要素を使用して、FieldElementControl コントロールを定義します。
XAML ファイルの バインド パラメーターは、サンプル ページ エディターのフィールドを UDI ウィザード構成ファイルの情報にバインドします。 たとえば、次のコードでは、 既定 値のテキスト ボックスを UDI ウィザード構成ファイル (例の Config.xml) の既定 の要素と 結び付けています。
<TextBox Text="{Binding FieldData.DefaultValue,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}"/>
詳細については、「 方法: XAML でデータをバインドできるようにする」を参照してください。
XAML の Views:CollectionTControl.ColumnCollectionView 要素を使用して、グリッド ビュー内の使用可能な場所の一覧を編集します。 CollectionTControl コントロールを使用してグリッド ビューを表示し、UDI 構成ファイル内の Location という名前でグリッド ビューをデータ要素にバインドします。
検索可能な場所の一覧の変更に使用するユーザー インターフェイスを確認します
使用可能な場所の一覧を変更するための 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 属性を使用して構成するタイトル
Approved プロパティの戻り状態を True に設定する [OK] ボタン (戻り状態は、LocationPageEditorViewModel.cs ファイルの AddLocationCallback メソッドでチェックされ、ユーザーが OK を選択したかどうかが判断されます)。
Approved プロパティの戻り状態が False に設定される [キャンセル] ボタン (戻り状態は、LocationPageEditorViewModel.cs ファイルの AddLocationCallback メソッドでチェックされ、ユーザーが [キャンセル] を選択したかどうかが判断されます)。
以下を含む WPF 要素。
Content 属性を使用して構成するラベル
UDI 構成ファイル (例の Config.xml ファイル) 内の Location という名前で Data 要素にバインドされているテキスト ボックス
構成情報の管理に使用されるコードを確認する
カスタム ウィザード ページの構成情報は、UDI ウィザード構成ファイルに保存されます。
UDI SDK で提供される例の Config.xml ファイル (このファイルには、例の構成設定のみが含まれています)。
MDT で提供される UDIWizard_Config.xml ファイル。 installation_folder\Templates\Distribution\Scripts フォルダー ( installation_folder は MDT をインストールしたフォルダー) に格納されます。このファイルには、すべての組み込みのウィザード ページとステージの構成設定が含まれています
SampleEditor の例では、 Locations ルーチンは構成情報の管理に役立ち、LocationPageEditorViewModel.cs ファイルにあります。 Locations ルーチンは、UDI ウィザード構成ファイルから場所のリストを返します。 具体的には、返されるリストには、UDI ウィザード構成ファイルの各 DataItem 要素のアイテムが含まれています。
カスタム UDI ウィザード ページの作成
カスタム UDI ウィザード ページを作成するプロセスの概要は次のとおりです。
開始点として SamplePage ソリューションのコピーを作成します。
フォーム上に目的のコントロール (フィールド) を配置します。
ウィザード ページが読み込まれたときに、次の手順を含む適切なタスクを実行するためのコードを記述します ( OnWindowCreated メソッドのオーバーライド)。
フォームを初期化します。
メモリ変数、タスク シーケンス変数、環境変数、または XML ファイル情報 ( Setter プロパティなど) を読み取ります。
ページが表示されているときに適切なタスクを実行するためのコードを記述します ( OnWindowShown メソッドのオーバーライド)。これには、次の手順が含まれます。
手順 3 でページが読み込まれたときに読み取られた情報に基づいてコントロールを有効または無効にします。
手順 3 でページが読み込まれたときに読み取った情報に基づいてコントロールを更新します (読み取られた情報に基づくコントロールの作成など)。
ユーザーがウィザード ページを操作している間に、適切なタスクを実行するためのコードを記述します。
ユーザーが UDI ウィザードで [次へ] を選択したときに、次の手順を含む適切なタスクを実行するためのコードを作成します。
メモリ変数、タスク シーケンス変数、環境変数、または XML ファイル情報を更新します。
サマリー ページ情報を更新します (ページ上のフィールドによって実行されない場合)。
ソリューションをビルドします。
作成する DLL のバージョンが、MDT のインストールと同じプロセッサ プラットフォーム、具体的には Windows プレインストール環境 (Windows PE) 用のプロセッサ プラットフォームであることを確認します。 UDI ウィザードは、次で実行できます。
ターゲット コンピューター上の既存のオペレーティング システム。 32 ビット版のウィザード ページは、32 ビット版または 64 ビット版の Windows オペレーティング システムで実行できます。 ただし、64 ビット版のウィザード ページは、64 ビット版の Windows オペレーティング システムでのみ実行できます。
ターゲット コンピューター上の Windows PE。 Windows PE は、64 ビット版の Windows PE での 32 ビット アプリケーションの実行をサポートしていません。 そのため、使用する予定の Windows PE のプロセッサ アーキテクチャごとに、ウィザード ページのバージョンを作成する必要があります。
カスタム ウィザード ページの DLL を installation_folder\Templates\Distribution\Tools\ プラットフォーム フォルダーにコピーします ( installation_folder は MDT をインストールしたフォルダーで、 プラットフォーム は 32 ビット バージョンの場合は x86 、64 ビット バージョンの場合は x64 です)。
カスタム ページ エディターの作成手順を完了します。
カスタム ウィザード ページ エディターの作成
カスタム UDI ウィザード ページ エディターを作成するためのプロセスの概要は次のとおりです。
開始点として SampleEditor ソリューションのコピーを作成します。
プライマリ ページ エディター UI を .xaml ファイルで作成します。
構成するウィザード ページで必要に応じて、 FieldElementControl コントロールのインスタンスを追加します (必要な場合)。
構成するウィザード ページで必要に応じて、 SetterControl コントロールのインスタンスを追加します (必要な場合)。
構成するウィザード ページで必要に応じて、 CollectionTControl コントロールのインスタンスを追加します (必要な場合)。
IDataService インターフェイスを追加します。
カスタム ウィザード ページ エディターを使用して構成する構成設定に基づいて UDI ウィザード構成ファイルを更新するための適切なコードを記述します。
.xaml ファイルに子ダイアログ ボックスを作成し、構成するウィザード ページで必要に応じて IMessageBoxService インターフェイスを使用してプライマリ ページ エディターから呼び出します。
構成するウィザード ページの要件に基づいて、UDI ウィザード Designer リボンに適切なインターフェイスを追加します。
ソリューションをビルドします。
注:
作成する DLL のバージョンが、MDT のインストールと同じプロセッサ プラットフォームであることを確認します。 たとえば、64 ビット版の MDT をインストールする場合は、64 ビット版のカスタム ページ エディターを作成します。
UDI ウィザードDesigner構成ファイルを作成して必要な DLL を読み込み、ウィザード ページ エディターを対応するウィザード ページ (例の SamplePage.dll.config ファイル) にマップします。
ウィザード ページとウィザード ページ エディター間のマッピングを実行するために必要な要素の詳細については、「 DesignerMappings 要素、子要素、および対応する属性」を参照してください。
前の手順で作成した UDI ウィザードDesigner構成ファイルを installation_folder\Bin\Config フォルダー (installation_folder は MDT バージョンをインストールしたフォルダー) にコピーします。
カスタム ウィザード ページ エディターの DLL を installation_folder\Bin フォルダー ( installation_folder は MDT をインストールしたフォルダー) にコピーします。
カスタム UDI タスクの作成
UDI タスク は、 ITask インターフェイスを実装する C++ で記述された DLL です。 この DLL を UDI ウィザード Designer タスク ライブラリに登録するには、UDI ウィザード Designer構成ファイル (.config ファイル) を作成し、installation_folder\Bin\Config フォルダー (installation_folder は MDT をインストールしたフォルダー) に配置します。
注:
同じ .dll ファイル内にウィザード ページ、タスク、検証ツールを含む DLL を作成できます。 単一の UDI ウィザードDesigner構成ファイル (.config) を作成することもできます。このファイルには、DLL 内のウィザード ページ、タスク、および検証機能の構成設定が含まれています。
カスタム UDI タスクを作成するには
ITask インターフェイスおよび次のメソッドを実装するコードを記述します。
カスタム タスク クラス ファクトリをファクトリ レジストリに登録するコードを記述します。
カスタム タスクのソリューションをビルドします。
注:
作成する DLL のバージョンが、MDT のインストールと同じプロセッサ プラットフォームであることを確認します。 たとえば、64 ビット版の MDT をインストールする場合は、64 ビット版のカスタム UDI タスクをビルドします。
次の抜粋に示すように、UDI Wizard Designer 構成ファイルの 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 パラメーターを含める必要があります。 タスクで必要に応じて、他のすべてのパラメーターを指定します。 たとえば、前の抜粋では、 ログ パラメーターを使用してログ ファイルの場所のパラメーターを指定します。
前の手順で作成した UDI ウィザードDesigner構成ファイルを installation_folder\Bin\Config フォルダー (MDT をインストールしたフォルダーがinstallation_folder) にコピーします。
カスタム タスクの DLL を installation_folder\Templates\Distribution\Tools\ プラットフォーム フォルダーにコピーします ( installation_folder は MDT をインストールしたフォルダーで、 プラットフォーム は 32 ビット バージョンの場合は x86 、64 ビット バージョンの場合は x64 です)。
カスタム UDI 検証ツールの作成
UDI バリデーターは 、 IValidator インターフェイスを実装する C++ で記述された DLL です。 この DLL を UDI ウィザード Designer バリデーター ライブラリに登録するには、UDI ウィザード Designer構成ファイル (.config ファイル) を作成し、installation_folder\Bin\Config フォルダー (MDT をインストールしたフォルダー installation_folder) に配置します。
カスタム UDI バリデーターを作成するには
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 message). フォーム コントローラーは、キーストロークやその他のイベントごとにこのメンバーを呼び出して、バリデーターがウィザード ページの下部にあるコントロールと更新されたメッセージの内容を検証する (またはクリアする) ことができるようにします。
通常、オーバーライドする必要があるメソッドはこれらだけです。 ただし、検証子によっては、作成する BaseValidator クラスのサブクラス内の他のメソッドをオーバーライドする必要がある場合があります。 これらの他のメソッドの詳細については、 BaseValidator クラスを参照してください。
カスタム タスク クラスをレジストリ ファクトリに登録するコードを記述します。
カスタム タスクのソリューションをビルドします。
注:
作成する DLL のバージョンが、MDT のインストールと同じプロセッサ プラットフォームであることを確認します。 たとえば、64 ビット版の MDT をインストールする場合は、64 ビット版のカスタム UDI タスクをビルドします。
次の抜粋に示すように、UDI Wizard Designer 構成ファイルの 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 パラメーターを使用して、定義済みの正規表現パターンの名前のパラメーターを指定します。
前の手順で作成した UDI ウィザードDesigner構成ファイルを installation_folder\Bin\Config フォルダー (MDT をインストールしたフォルダーがinstallation_folder) にコピーします。
カスタム タスクの DLL を installation_folder\Templates\Distribution\Tools\ プラットフォーム フォルダーにコピーします ( installation_folder は MDT をインストールしたフォルダーで、 プラットフォーム は 32 ビット バージョンの場合は x86 、64 ビット バージョンの場合は x64 です)。
UDI ウィザード リファレンス
ウィザード ページ コンポーネント
カスタム ページを構築するために、事前に構築済みのいくつかのコンポーネントのいずれかを使用できます。
コンポーネント インスタンスの作成
UDI ウィザードでは、クラス ファクトリを使用して、オブジェクトの新しいインスタンスを作成します。 これらのファクトリは、文字列をファクトリのキーとして使用して、ファクトリ レジストリに登録されます。 たとえば、 WmiRepository コンポーネントは文字列 "Microsoft.Wizard.WmiRepository" で識別されます。この文字列は、 ID_WmiRepositoryとして IWmiRepository ヘッダー ファイルで利用できます。
ページを WizardPageImpl のサブクラスとして記述したと仮定すると、次のように WmiRepoistory の新しいインスタンスを作成できます。
PWmiRepository pWmi;
CreateInstance(Container(), ID_WmiRepository, &pWmi);
CreateInstance 関数は、コンポーネントの新しいインスタンスを作成するための型安全なテンプレート関数です。 PWmiRepository はスマートなポインターなので、参照カウントを自動的に処理します。
作成可能なコンポーネント
レジストリに登録できるコンポーネントのセットがあります。 コンポーネントの最初のセットは常に登録されます。これは、UDI ウィザードのメイン実行可能ファイルが提供するためです。 他の 2 つのコンポーネント セットは、"省略可能な" DLL で提供されます。 これらのコンポーネントを使用できるようにするには、DLL を .config XML ファイルの DLL セクションに一覧表示する必要があります。 コードでは、特定のコンポーネントが含まれている実行可能ファイルを把握する必要はありません。
ファクトリ・レジストリ (OSDSetupWizard で定義) に登録されているコンポーネントのコンポーネント ID のリスト (コンポーネント名は ID と同じですが、初期 ID_はありません) を表 3 に示します。
表 3. コンポーネント ID
| ID | 説明 |
|---|---|
| ID_ACPowerTask | (ITask, IWizardComponent)コンピューターがバッテリだけで実行されていないことを確認するプリフライト タスク |
| ID_AppDiscoveryTask | (ITask, IWizardComponent)コンピューターにインストールされているソフトウェア アイテムを検出するための特殊なタスク |
| ID_BackgroundTask | (IBackgroundTask, IWizardComponent)別のスレッドでタスクを実行するために使用できます |
| ID_CopyFilesTask | (ITask, IWizardComponent)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 | (IStringProperties、 ISimpleStringProperties)XML を使用せずにタスクにプロパティを送信する簡単な方法を提供します |
| ID_ShellExecuteTask | (ITask, IWizardComponent)外部プログラムを実行する |
| ID_SummaryBag | (ISummaryBag)フォーム メソッドを使用してページから間接的に利用可能 |
| ID_TaskManager | (ITaskManager, IBackgroundCallback, IWizardComponent)一連のタスクと UI の実行を管理します |
| ID_WmiRepository | (IWmiRepository, IWizardComponent)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 | (IDriveList, IBindableList, IWizardComponent)WMI を使用してコンピューター上のドライブの一覧を取得する |
| ID_WiredNetworkTask | (ITask)(ワイヤレスではなく) 有線ネットワーク アダプターを使用してネットワークに接続されているかどうかを確認するタスク |
コントロール コンポーネント
GetControlWrapper テンプレート関数を使用してページ上のコントロールを操作します。この関数を使用すると、表 6 に示すコンポーネントの種類の 1 つにアクセスできます。
表 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 という 1 つのプロパティ (.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 という setter プロパティが含まれている必要があります。 代わりに名前付きパターンを使用する場合は、表 7 のいずれかの値に設定した NamedPattern というセッターを使用します。
表 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 メソッド( WizardPageImplによって実装)を介してページで使用できます。 このメソッドを使用して、ログ ファイルにエントリを書き込みます。 ログ ファイルの内容は、UDI ウィザードを実行するときに発生する可能性のある問題を診断するのに役立ちます。
PropertyBag コンポーネント
プロパティ バッグはメモリ変数のコンテナーです。 これは、 Container()->Properties() を使用してページから使用できます。 メモリ変数は、異なるページ間で一時データを渡す場合に便利です。
TSVariableBag および TSRepository コンポーネント
TSVariableBag コンポーネントを使用すると、タスク シーケンスの変数の読み取りと書き込みを行うことができます。 ユーザーが [完了 ] を選択 するまで、値はメモリに保持されます (既定)。 TSVariableバッグには、ページのTSVariablesメソッド(WizardPageImpl基本クラスによって実装)を介してアクセスできます。 これらのコンポーネントは、タスク シーケンス変数のすべての読み取りと書き込みをログに記録します。
WmiRepository コンポーネント
このコンポーネントは、WMI クエリを操作するためのファサードを提供します。 ID_WmiRepository を使用して CreateInstance ヘルパー関数を呼び出して、このコンポーネントのインスタンスを取得できます。このコンポーネントは、IWmiRepository インターフェイスをサポートします。 このコンポーネントは、 IWmiIterator インターフェイスを介して結果レコードを返します。
ウィザード ページ ヘルパー クラス
UDI SDK で提供される組み込みのヘルパー クラスを使用して、カスタム UDI ウィザード ページを作成できます。 表 8 に、カスタム ウィザード ページの作成に使用できるヘルパー クラスを示します。
表 8. ヘルパー クラス
| ヘルパー クラス | 説明 |
|---|---|
| ClassFactoryImpl クラス | これは、クラス ファクトリを作成するための便利な基本クラスであり、ファクトリ レジストリに登録できます。 |
| インターフェイス テンプレート クラス | このテンプレートクラスは、複数のインターフェイスを実装するコンポーネントを構築する場合に使用します。 |
| パス ヘルパー クラス | このクラスは、一般的なファイル/ディレクトリ操作を提供します。 |
| Pointer Template Class | このクラスは、COM コンポーネントの有効期間管理のための参照カウントを提供します。 使い終わったら、インターフェイスを解放することが重要です。 このテンプレート クラスは、有効期間を自動的に処理します。 |
| PUnknown クラス | このクラスは、IUnknown インターフェイス専用のスマート ポインターです。 他のすべてのインターフェイスでは、Pointer テンプレート クラスを使用します。 |
| StringUtil ヘルパー クラス | このクラスには、文字列を扱いやすくするヘルパー メソッドが用意されています。 |
| SubInterface Template Class | この基本クラスにより、別のインターフェイスから継承するインターフェイスをサポートするコンポーネントを簡単に実装できます。 |
| UnknownImpl テンプレート クラス | このクラスは、COM コンポーネントの作成に関するほとんどの詳細を処理します。 |
| WizardComponent Template Class | この基本クラスは、コンポーネントの作成やログなど、ウィザード サービスにアクセスする必要があるコンポーネントを作成するために使用されます。 |
| 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>>
このコードは、 IFieldCalback と WizardPageImpl がサポートするインターフェイス (このインターフェイスが 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 Template Class
このクラスは Pointer.h で定義されています。 COM コンポーネントは有効期間管理に参照カウントを使用するため、使用が終わったら必ずインターフェイスを解放することが重要です。 マイクロソフトでは、有効期間を自動的に処理するテンプレート クラスを提供しています。 たとえば、XML インターフェイス用のスマート ポインターが必要な場合は、次のように記述できます。
Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);
1 行目はスマート ポインターを定義します。 2 行目は、別の呼び出しを介してスマート ポインターを取得することを示しています。 & 演算子は、既存のインターフェイスが含まれている場合は必ずそのインターフェイスを解放し、内部ポインターのアドレスを返します。 このようなポインターを取得すると、変数がスコープから出たときに、 Pointer インスタンスによって Release が自動的に呼び出されます。 Microsoft では、 手動で AddRef と Release を呼び出すのではなく、スマート ポインターを使用することをお勧めします。
また、 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 | 最初 < 秒 |
| >0 | 最初 > 秒 |
次に例を示します:
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 形式のメソッドに少し似ています。 ただし、入力の書式設定は実行されず、置換のみが実行されます。
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)
これらは StringCchPrintf を囲むラッパーで、 wstring を返すため、文字列またはバッファーに自分でメモリを割り当てる必要はありません。
SubInterface Template Class
この基本クラスにより、別のインターフェイスから継承するインターフェイスをサポートするコンポーネントを簡単に実装できます。 たとえば、 ICheckBox インターフェイスは IControl から継承されます。 このクラスを使用して CheckBoxWrapper を定義する方法を次に示します。
classCheckBoxWrapper :public SubInterface<IControl, UnknownImpl<ICheckBox> >
基本インターフェイスは最初のパラメーターであり、派生インターフェイスは 2 番目のパラメーターです。
UnknownImpl テンプレート クラス
このクラスは UnknownImpl.h で定義されており、COM コンポーネントの作成に関する詳細の大部分を処理します。 この基底クラスを使用する方法の例を次に示します。
classDirectory :public UnknownImpl<IDirectory>
このコードは、 IDirectory インターフェイスをサポートするクラスを定義します。
WizardComponent Template Class
このクラスは 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);
ここで、 PStaticText は IStaticText インターフェイスへのスマート ポインターです。 スマート ポインターがスコープから外れたとき、または変数のアドレス (&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 ユーザー名, LPCTSTR パスワード, LPCTSTR ドメイン)
このメソッドは、表 10 に示すように、一連の資格情報が有効であるかどうかを確認します。
表 10. HResultValidLogon
| HRESULT 型 | 説明 |
|---|---|
| S_OK | 資格情報は有効です |
| S_FALSE | 資格情報が無効です |
| E_FAIL | ドメイン コントローラーが見つかりませんでした。詳細はログをチェックする |
HRESULT HasAccess(LPCTSTR username, LPCTSTR password, LPCTSTR domain, 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 インターフェイスをサポートするすべてのクラスです。
このインターフェイスは、IBackgroundTask.h インターフェイスで定義されている ID_BackgroundTask ("Microsoft.Wizard.BackgroundTask") コンポーネントによって実装されます。
HRESULT init(ITask *pTask, int id, IBackgroundCallback *pCallback)
このインターフェイスは、表 12 に示すようにコンポーネントを初期化します。
表 12. HRESULT 初期化
| パラメーター | 説明 |
|---|---|
| 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 | terminate の呼び出しに失敗しました。 |
| S_OK | スレッドを終了する要求は成功しました。 |
HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult)
このメソッドを使用して、バックグラウンド スレッドでタスクを実行した結果を取得します (表 16 を参照)。
表 16. 結果コード
| パラメーター | 説明 |
|---|---|
| pCode | 戻り値の返り値に設定される DWORD へのポインター。戻り値が必要ない場合は nullptr です。 終了時に、このパラメーターは、スレッドが実行中か、タスクの Execute メソッドによって返されたコード、またはそのメソッドを呼び出した場合に Terminate メソッドに渡される値STILL_ACTIVEに設定されます。 |
| pHresult | HRESULT 値が必要ない場合は、戻り値または nullptr に設定される HRESULT へのポインター。 |
HRESULT Close(void)
このメソッドはバックグラウンド スレッドを解放します。 スレッドが現在実行されている場合は E_INVALIDARG を返し、それ以外の場合は S_OK を返します。
ICheckBox インターフェイス
__interface ICheckBox : IControl
{
void Check(BOOL check);
BOOL IsButtonChecked();
};
void チェック (BOOL チェック)
チェックボックスのチェック状態を設定します。 メソッドが TRUE の場合はチェック ボックスがオンになります。メソッドが FALSE の場合は、チェック ボックスはオフになります。
BOOL IsButtonChecked()
このメソッドは、チェック ボックスの現在のチェック状態を報告します。
IComboBox インターフェイス
__interface IComboBox : IControl
{
HRESULT Bind([in] IBindableList *pList);
HRESULT Select(int index);
int Selected(void);
void Add([in] LPCTSTR caption);
HRESULT GetText([out, retval] LPBSTR pText);
void Clear();
};
概要
このインターフェイスは、 CheckBoxWrapper コンポーネントによって実装されます。 このコンポーネントのインスタンスは、型 CONTROL_COMBO_BOX の GetControlWrapper ヘルパー関数を使用して取得します。
HRESULT Bind([in] IBindableList *pList)
このメソッドは、 IBindableList インターフェイスを実装するデータ ソースがある場合に使用します。 リスト ボックスは、このリストのキャプションを使用して内容を初期化します。
HRESULT Select(int index)
コンボ ボックスのインデックス位置でアイテムを選択します。
int Selected(void)
このメソッドは、選択した項目のインデックスを返します。何も選択されていない場合は -1 を返します。
void Add([in] LPCTSTR キャプション)
コンボ ボックスにアイテムを手動で追加します。
HRESULT GetText([out, retval] LPBSTR pText)
コンボ ボックスで現在選択されている項目の文字列を取得します。
void Clear()
コンボ ボックスからすべてのアイテムを削除します。
IControl インターフェイス
__interface IControl : IUnknown
{
HRESULT SetEnable(BOOL enable);
BOOL IsEnabled(void);
HRESULT SetVisible(BOOL visible);
};
概要
このインターフェイスは、 ControlWrapper コンポーネントによって実装されます。 このコンポーネントのインスタンスは、型 CONTROL_GENERIC の GetControlWrapper ヘルパー関数を使用して取得します。
HRESULT SetEnable(BOOL enable)
コントロールを有効または無効にします。
BOOL IsEnabled(void)
コントロールが有効になっている場合は TRUE を返し、有効になっていない場合は FALSE を返します。
HRESULT SetVisible(BOOL visible)
コントロールの表示と非表示を切り替えます。
ICpuInfo インターフェイス
__interface ICpuInfo : IUnknown
{
BOOL Is64Bit(void);
};
概要
このインタフェースは、新しい ID_CpuInfo コンポーネントを作成することによって取得します。 単一のメソッドでは、CPU が 32 ビットであるか 64 ビットであるかがレポートされます。 32 ビット オペレーティング システムが 64 ビット コンピューター上にある場合、このメソッドは (オペレーティング システムではなく) CPU の幅のみを報告するため、TRUE を返すことに注意してください。
IDirectory インターフェイス
__interface IDirectory : IUnknown
{
BOOL FileExists(LPCWSTR name);
BOOL FindFirst([in] LPCWSTR name);
HRESULT FoundName([out, retval] LPBSTR name);
DWORD FoundAttributes(void);
BOOL FindNext(void);
void FinishFind(void);
};
概要
ID_Directoryを使用して作成するディレクトリコンポーネントは、ファイルシステム内のディレクトリを操作するためのファサードを提供します。
BOOL FileExists(LPCWSTR name)
指定した名前のファイルが存在する場合、このメソッドは TRUE を返します。
BOOL FindFirst([in] LPCWSTR 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 初期化 - インスタンスの初期化
| パラメーター | 説明 |
|---|---|
| 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 size)
クエリから返されるドライブの最小ドライブ サイズをバイト単位で設定します。
HRESULT Update(void)
クエリを実行します。 このメソッドを呼び出した後に使用できるドライブ リストは、ドライブ文字で並べ替えられます。
HRESULT AddProperty(ENUM_DISK_QUERY_SECTION 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 index, LPCTSTR propName, LPVARIANT value)
このメソッドは、表 19 に示すように、クエリの結果からプロパティの値を取得します。
表 19. HRESULT GetProperty
| パラメーター | 説明 |
|---|---|
| Index | 結果レコードの 0 から始まるインデックス |
| propName | プロパティの名前 ("Size" など) |
| 値 | 戻ったとき、このパラメーターにはプロパティのバリアント値が含まれます |
HRESULT GetCaption(size_t index, LPBSTR pCaption)
このメソッドは、キャプション プロパティと同じレコードのキャプションを取得します。
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 コンポーネントによって実装されます。 このコンポーネントのインスタンスは、型 CONTROL_LIST_VIEW の GetControlWrapper ヘルパー関数を使用して取得します。
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 style)
この方法では、リスト ボックスに拡張スタイルを設定できます。次に例を示します。
m_pList->SetExtendedStyle(LVS_EX_FULLROWSELECT);
int GetSelectedItem(void)
このメソッドは、現在選択されているリスト ビュー アイテムのインデックスを返します。
HRESULT SelectItem(int index)
一覧で選択したアイテムをこのインデックスに設定します。
BOOL IsItemChecked(int index)
このメソッドは、リスト内のアイテムが選択されている場合に TRUE を返します。 このメソッドでは、SetExtendedStyle を呼び出してチェック ボックス スタイルを設定する必要があります。
int GetItemCount(void)
このメソッドは、リスト ビュー内の項目数を返します。
HRESULT CreateImageList(int width, int height, UINT flags)
新しい画像リストを作成し、リスト ビューに添付します。
int AddImage(HINSTANCE hInstance, int resourceId)
リスト ビューの画像リストに画像を追加します。 最初に CreateImageList を呼び出す必要があります。
HRESULT SetImage(int index, int imageIndex)
特定のリスト ビュー項目の左側に表示される画像を設定します。
HRESULT Clear(void)
リスト ビューからすべてのアイテムを削除します。
IProgressBar インターフェイス
__interface IProgressBar : IControl
{
HRESULT SetPercentage(int position);
int GetPercentage(void);
};
概要
このインターフェイスは、 ProgressBarWrapper コンポーネントによって実装されます。 このコンポーネントのインスタンスは、型 CONTROL_PROGRESS_BAR の GetControlWrapper ヘルパー関数を使用して取得します。
HRESULT SetPercentage(int position)
0 から 100 までの数値を使用して、進行状況バーの位置を設定します。 既定では、新しい Win32® 進行状況バーの最大範囲は 100 です。
int GetPercentage(void)
このメソッドは、進行状況バーの現在の位置を返します。
IRadioButton インターフェイス
__interface IRadioButton : IControl
{
public:
void SetGroup(int firstId, int lastId);
void CheckRadio(int id);
BOOL IsButtonChecked(int id);
void EnableRadio(int id, BOOL enable);
};
概要
このインターフェイスは、 RadioButtonWrapper コンポーネントによって実装されます。 このコンポーネントのインスタンスは、型 CONTROL_RADIO_BUTTON の GetControlWrapper ヘルパー関数を使用して取得します。
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 コンポーネントによって実装されます。 型 CONTROL_STATIC_TEXT の GetControlWrapper ヘルパー関数を使用して、このコンポーネントのインスタンスを取得します。
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 コンポーネントによって実装されます。 このコンポーネントのインスタンスは、型 CONTROL_TREE_VIEW の GetControlWrapper ヘルパー関数を使用して取得します。
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 item)
現在選択されている項目を、指定した項目に設定します。 この後で 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 item, 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 item)
このメソッドは、ツリー ビュー ノードが選択されていない場合は 0 を返し、選択されている場合は 1 を返します。
BOOL IsEnabled(HTREEITEM item)
このメソッドは、ツリー ビュー ノードが有効な場合は 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 の結果
| 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 query, [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);
この呼び出しは、フォーム コントローラーがフォーム関連のイベントを処理できるように、イベントをフォーム コントローラーに渡します。
フォーム データの保存
OnNextSelected メソッドで、表 29 に示すフォーム メソッドを呼び出します。
表 29. OnNextSelected メソッド
| メソッド | 説明 |
|---|---|
| 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 |
| Controlld | 子として追加するコントロールの 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
| パラメーター | 説明 |
|---|---|
| フィールド名 | ページの 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 に示すように、名前付きラジオ ボタン グループにコントロールを追加します。 InitFields メソッドは RadioGroup 要素の属性を使用して、グループ内のすべてのラジオ ボタン コントロールの設定を制御するため、このメソッドは InitFields メソッドの前に呼び出す必要があります。 ラジオ グループは、たとえばすべてのラジオ ボタンを無効にするようにロックできますが、子コントロールは、どのラジオ ボタンが選択されたかに基づいてのみ有効または無効になります。 このメソッドは常に S_OK を返します。
表 33 HRESULT AddRadioGroup
| パラメーター | 説明 |
|---|---|
| groupName | このページのラジオ ボタンのグループを定義する文字列 |
| radioControlId | このグループに追加する単一のラジオ ボタンの 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 パラメーターは省略可能です。 この値を指定した場合、フォーム コントローラーは CONTROL_STATIC_TEXT または CONTROL_CHECK_BOX ではないコントロールに対して SetFieldDefault を呼び出します。 この動作により、XML から既定値を取得し、コントロールに自分で設定できます。
SaveFields
HRESULT SaveFields(IFieldCallback *pFieldCallback = nullptr)
このメソッドは、フィールド値をタスク シーケンス変数と、[ 概要] ページに表示される概要データに保存します。 pFieldCallback にポインターを指定すると、CONTROL_STATIC_TEXT をサポートしていないコントロールの値の保存を処理できます。
IsFieldDisabled
BOOL IsFieldDisabled(int controlId)
この方法では、フィールドが XML で無効になっているかどうかを判別できます。
InitSection
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)
このメソッドは、表 36 に示すように、[ 概要] ページに表示される概要データを初期化します。 SaveFields を呼び出す前に、OnNextSelected メソッドでこのメソッドを呼び出します。 このメソッドは常に 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 message)
コードでバリデーターを作成する場合は、このメソッドを呼び出してバリデーターを初期化できます。 表 39 を参照してください。
表 39 HRESULT 初期化
| パラメーター | 説明 |
|---|---|
| pControl | 検証ツールが検証する必要があるコントロール |
| Message | コントロールが無効な場合にページに表示するメッセージ |
HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties)
フォーム コントローラーは、このメソッドを呼び出して、ページの XML に基づいて作成されたバリデーターを初期化します。 表 40 を参照してください。
表 40 HRESULT 初期化メソッド
| パラメーター | 説明 |
|---|---|
| pControl | 検証ツールが検証する必要があるコントロール |
| pContainer | バリデーターがロガーにアクセスする必要がある場合、または他のコンポーネントを作成する必要がある場合 |
| pプロパティ | バリデーターのプロパティ (セッター要素) へのアクセスを提供します |
BOOL, IsValid(LPBSTR, pMessage)
このメソッドは、コントロールが有効な場合は TRUE を返し、コントロールが無効な場合は FALSE を返します。 返されるときに、コントロールが無効な場合に表示するメッセージを含む新しい BSTR を pMessage に入力する必要があります。
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 index, 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 プロパティが使用されます。 コンボ ボックスには、 パブリックチームと開発チーム がアイテムとして含まれます。
HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue)
このメソッドは、 DataItem 要素の 1 つからプロパティを取得します。 表 41 および表 42 を参照してください。
表 41 DataItem GetProperty
| パラメーター | 説明 |
|---|---|
| Index | プロパティ値を取得する DataItem のインデックス値 (0 から始まる) |
| PropertyName | 値を取得するセッター プロパティの名前 |
| 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 type, IClassFactory *pFactory)
このメソッドは、クラス ファクトリをレジストリに登録します。 表 45 を参照してください。
表 45 IClassFactory void Register
| パラメーター | 説明 |
|---|---|
| 型 | 登録するファクトリを識別する文字列。一般的に、このパラメーターは、一意であることを保証するために、文字列内に会社名が含まれている必要があります |
| pFactory | クラス ファクトリ インスタンスへのポインター |
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger)
このメソッドは内部の使用のみに限ります。
BOOL Contains(LPCTSTR type)
この方法は、通常、内部使用のためのものです。 クラス ファクトリが型に登録されているかどうかを確認します。
HRESULT GetFactory(LPCTSTR 型, IClassFactory **ppFactory)
このメソッドを使用すると、クラス ファクトリを取得できます。 通常は、 CreateInstance を呼び出します。 ただし、同じコンポーネントを大量に作成する場合は、ファクトリを取得してから、インスタンスの作成を依頼する方が効率的です。
HRESULT CreateInstance(LPCTSTR type, 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)
このメソッドは内部の使用のみに限ります。
Error
HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message)
このメソッドを呼び出して、エラーに関する情報をログに記録します。 表 46 を参照してください。
表 46 HRESULT エラー
| パラメーター | 説明 |
|---|---|
| Error | 呼び出しによって返されるエラー コード (このコードは、数値としてログ エントリに表示されます。) |
| コンポーネント | エラーの原因 (通常はページまたは書き込んだコンポーネント) を識別する文字列 |
| Message | エラーの原因を説明するメッセージ |
エラー 2
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)
このメソッドは、ログ ファイルの名前を取得します。
アプリケーション インターフェイス
__interface IOrientation : IUnknown
{
void SetController(IWizardDialogController *pController);
int AddPage(LPCTSTR name);
void SelectPage(int index);
};
このインターフェイスは内部でのみ使用できます。
設定インターフェイス
__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 式を使用して単一の 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);
};
このインターフェイス自体は役に立たない場合があります。 ただし、これは ID_SimpleStringProperties コンポーネントによって実装され、 IStringProperties インターフェイスも実装されます。 このコンポーネントは、タスクなどの別のコンポーネントに一連のプロパティを渡す必要があるが、XML の値を使用する代わりにプログラムで値を追加したい場合に使用できます。 このインターフェイスの使用方法の例を次に示します。
PSimpleStringProperties *pProperties;
CreateInstance(Container(), ID_SimpleStringProperties, &pProperties);
pProperties->Add(L"filename", L"%windir%\\system32\\cscript.exe");
pTask->Init(pProperties, nullptr);
IStringProperties
__interface IStringProperties : IUnknown
{
HRESULT Get(LPCTSTR propertyName, [out] LPBSTR pPropValue);
};
このインターフェイスを使用すると、XML から取得される一連の setter 要素に簡単にアクセスできます。 このインターフェイスは、 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)
このメソッドは、他のメソッドを呼び出す前に呼び出す必要があります。 タスク マネージャー コンポーネントを初期化します。 表 49 を参照してください。
表 49 HRESULT 初期化
| パラメーター | 説明 |
|---|---|
| pPageView | タスクを実行するページへのアクセスを提供します (このページには、次のいくつかのパラメーターで概説する特定のコントロール セットが必要です)。 |
| idListView | タスクの一覧およびそれらのタスクの状態を表示する ListView コントロールのコントロール ID |
| idMessage | 選択したタスクのメッセージを表示するために使用されるテキスト ボックスのコントロール ID |
| idRetryButton | タスクを再実行するために選択できるボタンのコントロール ID |
| pPageInfo | ページの XML を囲むラッパー (TaskManager は、この XML から実行するタスクのセットを読み込みます)。 |
| pCallback | null を指定できます (このパラメーターが null でない場合、 タスク マネージャーはタスクを開始するときに 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 index, LPCTSTR propertyName, LPBSTR value)
このメソッドは、進行状況ページとプリフライト ページで BitmapFilename セッター プロパティを取得するために使用し、強調表示したタスクのメッセージの横に画像を表示できるようにします。 つまり、タスクの 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)
ページの OnCommonControlEvent からこのメソッドを呼び出して、 TaskManager が必要なイベントを処理できるようにします。
void OnControlEvent(WORD eventId, WORD controlId)
このメソッドをページの 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 NextSelected(void);
void ControlEvent(WORD eventId, WORD controlId);
void CommonControlEvent(WORD controlId, LPNMHDR pInfo, LPBOOL pCancel);
void UnhandledEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
};
概要
このインタフェースは WizardPageImpl によって実装されるため、通常、自分で実装する必要はありません。 ウィザードは、カスタム ページを操作するときに、これらのメソッドを自動的に呼び出します。
IWizardPageContainer インターフェイス
__interface IWizardPageContainer : IUnknown
{
ILogger * Logger(void);
IPropertyBag * Properties(void);
HRESULT CreateInstance(LPCTSTR type, [out] IUnknown **ppInstance);
HRESULT GetService(REFIID iid, [out] IUnknown **ppInstance);
HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest);
HRESULT GotoPage(LPCTSTR pageName);
int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType);
BOOL InPreview(void);
HWND GetHwnd(void);
};
概要
このインタフェースは、 Containerメソッド ( WizardPageImplによって実装)を介してページで使用でき、ウィザードのさまざまなサービスにアクセスできます。
ILogger * Logger(void)
このメソッドを使用して、ログ ファイルにメッセージを書き込みます。次に例を示します。
Logger()->Verbose(s_component, L"Message for log file");
IPropertyBag * プロパティ (void)
このメソッドは、UDI ウィザードの実行中にのみメモリ内のプロパティである "メモリ" 変数へのアクセスを提供します。 これらのプロパティは、 $memoryVarName$ 構文を使用するコードまたは XML の他のページで使用できます。
HRESULT CreateInstance(LPCTSTR type, [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 ファイルで定義されているページの名前に基づいて、特定のページに直接切り替えることができるというものです。 このメソッドを呼び出すと、ページ上の OnNextSelected がバイパスされます。 また、本メソッドの動作は変更される場合がありますので、自己責任でご利用ください。
int ShowMessageBox(LPCTSTR メッセージ, LPCTSTR lpCaption, UINT uType)
この方法では、指定したテキストとキャプションを含むメッセージ ボックスが表示されます。 uType パラメータは、メッセージ ボックス 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 表示 (void)
このメソッドは内部の使用のみに限ります。
HRESULT Hide(void)
このメソッドは内部の使用のみに限ります。
HRESULT Focus(int itemId)
入力フォーカスを特定のコントロールに設定します。
IWizardPage * Page(void)
このメソッドは内部の使用のみに限ります。
IFormController * Form(void)
このメソッドは内部の使用のみに限ります。
HRESULT FocusWizardButton(WizardButtons button)
ウィザードのいずれかのボタンにフォーカスを設定します。WizardButtons には、BackButton と NextButton の 2 つの値があります。
HRESULT SetEnable(WizardButtons button, BOOL enable)
ウィザード ボタンの 1 つを有効または無効にするように要求します。 ボタンが要求された状態と一致しない可能性があります。 たとえば、 /preview スイッチを指定して UDI ウィザードを実行すると、ボタンは常に有効になります。 WizardButtons には、BackButton と NextButton の 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 filename)
このメソッドは、外部ファイルから XML ドキュメントを読み込みます。 ファイルがエラーなしで読み込まれた場合は S_OK を返し、エラーが発生した場合は S_FALSE を返します。 エラーが発生した場合は、 GetParseErrorMessage を呼び出すことによってエラー メッセージを取得できます。
HRESULT LoadXml(LPCTSTR xml)
このメソッドは、外部ファイルではなく文字列から XML ドキュメントを読み込みます。 XML を読み取るためのソース以外では、動作は Load メソッドと同じです。
HRESULT 保存 (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 name, LPCWSTR value)
このメソッドは、XML ドキュメントの既存のノードに新しい属性を追加します。 表 53 を参照してください。
表 53 HRESULT AddAttribute
| パラメーター | 説明 |
|---|---|
| pNode | 属性を追加するノード |
| 名前 | 新しい属性の名前 |
| 値 | 新しい属性の値 |
HRESULT CreateNode(DOMNodeType type, LPCWSTR name, 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 ウィザード Designer 構成ファイル スキーマ参照
このファイルは、UDI ウィザード Designer によって使用されます。 カスタム .dll ファイルごとに個別のファイルが作成されます。このファイルには、カスタム ウィザード ページ エディター、カスタム タスク、またはカスタム バリデーターを含めることができます。 ファイルは末尾 が.config で、 installation_folder\Bin\Config フォルダー ( installation_folder は MDT をインストールしたフォルダー) に存在する必要があります。
表 54 に、UDI Wizard Designer 構成ファイルの要素とその説明を示します。 DesignerConfig 要素は、この参照のルート ノードです。
表 54 UDI ウィザード Designer 構成ファイルの要素とその説明
| 要素名 | 説明 |
|---|---|
| DesignerConfig | 他のすべての要素のルートを指定します |
| DesignerMappings | ページ要素のセットをグループ化します |
| Page | UDI ウィザード Designer に読み込むウィザード ページ エディターを指定します。これは、ウィザード ページの構成設定を編集するために使用します |
| Param | 親の Task 要素または Validator 要素に渡され、UDI ウィザード構成ファイルの Setter 要素に対応するパラメーターを指定します。 注: 親が Task 要素または Validator 要素の場合、この要素の属性は異なります。 |
| タスク | タスク ライブラリ内のタスクを指定します |
| TaskItem | タスクに渡すパラメーターのグループを指定します |
| TaskLibrary | タスク 要素の セットをグループ化します |
| Validator | バリデーター ライブラリ内のバリデーターを指定します |
| ValidatorLibrary | バリデーター要素のセットをグループ化します |
DesignerConfig
この要素は、他のすべての要素のルートを指定します。
要素の情報
表 55 に、 DesignerConfig 要素に関する情報を示します。
表 55 DesignerConfig 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 1: この要素は必須です。 |
| 親要素 | なし |
| コンテンツ | DesignerMappings、 TaskLibrary、 ValidatorLibrary |
要素の属性
この要素には属性はありません。
注釈
なし。
例
<DesignerConfig>
+ <TaskLibrary>
+ <ValidatorLibrary>
+ <DesignerMappings>
</DesignerConfig>
DesignerMappings
この要素は、 Page 要素のセットをグループ化します。
要素の情報
表 56 に、 DesignerMappings 要素に関する情報を示します。
表 56 DesignerMappings 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | DesignerConfig 要素内の 0 または 1 (この UDI ウィザード Designer 構成ファイルに対応するカスタム ウィザード ページが 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 Wizard Designer に読み込まれるウィザードページエディタを指定します。これは、ウィザードページの構成設定を編集するために使用されます。
要素の情報
表 57 に、 Page 要素に関する情報を示します。
表 57 ページ要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | DesignerMappings 要素で定義されている各ウィザード ページについて 1 つまたは複数 |
| 親要素 | DesignerMappings |
| コンテンツ | 整形式の XML コンテンツ |
要素の属性
表 58 に、 Page 要素の属性と各属性の説明を示します。
表 58 Page 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| 説明 | UDI ウィザード Designer に表示されるパラメータに関する情報を提供するテキストを指定します |
| DesignerAssembly | ウィザード ページ エディターに関連付けられている .dll ファイルの名前を指定します (.dll ファイルは installation_folder\Bin フォルダー ( installation_folder は MDT をインストールしたフォルダー) に存在する必要があります。 |
| DesignerType | DesignerAssembly 属性で指定された .dll ファイル内のウィザード ページ エディターの名前を指定します (これは、ウィザード ページ エディターの Microsoft .NET 型で、完全修飾 Microsoft .NET 名前空間です)。 |
| DisplayName | UDI ウィザード Designer に表示されるページ エディターのわかりやすい名前を指定します |
| DLL | ウィザード ページに関連付けられている .dll ファイルの名前を指定します (.dll ファイルは installation_folder\Templates\Distribution\Tools\platform フォルダー ( installation_folder は MDT をインストールしたフォルダーで、 プラットフォーム は 32 ビット バージョンの場合は x86 、64 ビット バージョンの場合は x64 である必要があります)。 メモ: DLL のプロセッサ アーキテクチャが、インストールされている MDT のプロセッサ アーキテクチャと一致していることを確認します。 たとえば、32 ビット版の MDT をインストールした場合は、ウィザード ページに必ず 32 ビット版の DLL を使用します。 |
| Image | ポータブル ネットワーク グラフィックス (PNG) 形式のページの画像の名前を指定します (.png ファイルは installation_folder\Bin\Images フォルダー ( installation_folder は MDT をインストールしたフォルダー) に存在する必要があります。 |
| Type | ウィザード ページ エディターを指定します。カスタム ページが登録されたときに使用された名前と一致する必要があります |
注釈
UDI ウィザード Designer は、テンプレートのように Page 要素を使用して、新しいウィザードの最初の XML を作成します。 UDI ウィザード Designer はスキーマの検証を実行して、Page 要素と子要素が有効な形式であることを確認します。 この要素は、UDI ウィザードのページ タイプと、UDI ウィザード Designer がカスタム ページ エディタを使用してこの種類のページを編集および作成するために必要な情報との間のマッピングを提供します。
例
なし。
パラメーター
この要素は、親の Task 要素または Validator 要素に渡されるパラメーターを指定し、UDI ウィザード構成ファイルの Setter 要素に対応します。
注:
親が Task 要素または Validator 要素の場合、この要素の属性は異なります。
要素の情報
表 59 に、 Param 要素に関する情報を示します。
表 59 パラメーター要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各 TaskItem または Validator 親要素に対して 1 つ以上 |
| 親要素 | TaskItem、 Validator |
| コンテンツ | 整形式の XML コンテンツ |
要素の属性
表60に、 Param 要素の属性と各属性の説明を示します。
表 60 param 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| 説明 | UDI ウィザード Designer に表示されるパラメータに関する情報を提供するテキストを指定します。注: この属性は Validator 要素に対してのみ有効です。 |
| DisplayName | UDI Wizard Designerの該当するUDIウィザードページに表示されるバリデーターパラメータのわかりやすい名前を指定します(通常、この名前はName属性よりもわかりやすいです。注: この属性はValidator要素に対してのみ有効です。 |
| 名前 | 親要素に応じて、タスクまたはバリデーターに渡されるパラメーターの名前を指定します (この属性は、UDI ウィザード構成ファイルの Setter 要素の Property 属性になります)。メモ:このパラメーターは、TaskItem と Validator の両方の親要素に使用されます。 |
注釈
なし。
例
なし。
タスク
この要素は、タスク ライブラリ内のタスクを指定します。
要素の情報
表 61 に、 タスク 要素に関する情報を示します。
表 61 タスク要素の情報
| Attribute | 値 |
|---|---|
| 発生回数 | TaskLibrary 要素内の 1 つ以上 (TaskLibrary 要素が指定されている場合、この要素は省略できません)。 |
| 親要素 | TaskLibrary |
| コンテンツ | TaskItem |
要素の属性
表 62 に、 Task 要素の属性とそれぞれの説明を示します。
表 62 タスク要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| 説明 | UDI ウィザード Designer に表示されるタスクに関する情報を提供するテキストを指定します |
| DLL | タスクに関連付けられている .dll ファイルの名前を指定します (.dll ファイルは installation_folder\Templates\Distribution\Tools\platform フォルダー ( installation_folder は MDT をインストールしたフォルダーで、 プラットフォーム は 32 ビット バージョンの場合は x86 、64 ビット バージョンの場合は x64 である必要があります)。 |
| 名前 | 該当する UDI ウィザードのページおよび UDI ウィザードのDesignerに表示されるタスクの名前を指定します。 |
| Type | タスクの種類を指定します。これは、ファクトリ レジストリに登録され、.dll ファイル内の特定のタスクを呼び出すために使用されます |
注釈
なし。
例
なし。
TaskItem
この要素は、タスクに渡されるパラメーターのグループを指定します。
要素の情報
TaskItem 要素に関する情報を表 63 に示します。
表 63 TaskItem 要素の情報
| Attribute | 値 |
|---|---|
| 発生回数 | Task 要素ごとに 1 つまたは複数 |
| 親要素 | タスク |
| コンテンツ | Param |
要素の属性
表 64 に、 TaskItem 要素の属性を示し、それぞれの説明を示します。
表 64 TaskItem 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| 型 | UDI ウィザード構成ファイルに作成される要素の型を指定します。 この属性の値に対応する XML 要素が作成されます。 たとえば、この属性の値が File の場合、 File 要素が UDI ウィザード構成ファイルに作成されます。 現時点では、サポートされている値は次のとおりのみです。 - ファイル。これには、2 つの Param 子要素 (Name 属性が Source に設定された Param 子要素と、Name 属性が Dest に設定された Param 子要素) が必要です。 - Setter。1 つの Param 子要素を必要とします。 |
注釈
なし。
例
なし。
TaskLibrary
この要素は、 一連の Task 要素 をグループ化します。
要素の情報
TaskLibrary 要素に関する情報を表 65 に示します。
表 65 TaskLibrary 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | DesignerConfig 要素内の 0 または 1 (この UDI ウィザード Designer 構成ファイルに対応するカスタム タスクが 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>
Validator
この要素は、バリデーター ライブラリ内のバリデーターを指定します。
要素の情報
表 66 に、 Validator 要素に関する情報を示します。
表 66 バリデーター要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | ValidatorLibrary 要素内の 0 以上 (この要素は省略可能です。) |
| 親要素 | ValidatorLibrary |
| コンテンツ | Param |
要素の属性
表 67 に、 Validator 要素の属性とそれぞれの説明を示します。
表 67 Validator 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| 説明 | UDI ウィザード Designer に表示されるバリデーターに関する情報を提供するテキストを指定します |
| DisplayName | UDI ウィザード Designer に表示されるバリデーターのわかりやすい名前を指定します (通常、この名前は Name 属性よりもわかりやすいです)。 |
| DLL | 検証ツールに関連付けられている .dll ファイルの名前を指定します (.dll ファイルは installation_folder\Templates\Distribution\Tools\platform フォルダー ( installation_folder は MDT をインストールしたフォルダーで、 プラットフォーム は 32 ビット バージョンの場合は x86 、64 ビット バージョンの場合は x64 である必要があります)。 |
| 名前 | バリデーターの名前を指定します。この名前は、適切な UDI ウィザード ページおよび UDI ウィザード Designer に表示されます |
| Type | レジストリ ファクターに登録され、.dll ファイル内の特定のバリデーターを呼び出すために使用されるバリデーターの種類を指定します |
注釈
なし。
例
なし。
ValidatorLibrary
この要素は、 一連の Validator 要素をグループ化します。
要素の情報
表 68 に、 ValidatorLibrary 要素に関する情報を示します。
表 68 ValidatorLibrary 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | DesignerConfig 要素内の 0 または 1 (この UDI ウィザード Designer 構成ファイルに対応するカスタム バリデーターが DLL にない場合、この要素は省略可能です)。 |
| 親要素 | DesignerConfig |
| コンテンツ | Validator |
要素の属性
この要素には属性はありません。
注釈
なし。
例
<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL="" Description="フィールドにテキストが必要" Type="Microsoft.Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="フィールドに特定の文字を入れない" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Must follow a pre-defined pattern" Type="Microsoft.Wizard.Validation.RegEx" Name="NamedPattern"> +<Validator DLL="" Description="内容が正規表現と一致する必要がある" Type="Microsoft.Wizard.Validation.RegEx" Name="RegEx"></ValidatorLibrary> + <DesignerMappings></DesignerConfig>
UDI ウィザード Designer リファレンス
コントロール
UDI ウィザード Designer で使用するカスタム ウィザード ページ エディターを作成するために使用されるコントロールは、WPF UserControl インスタンスです。 表 69 に、カスタム ウィザード ページ エディタの作成に使用できるコントロールを示します。
表 69 カスタム ウィザード ページ エディターの作成に使用できるコントロール
| コントロール | 説明 |
|---|---|
| 製品グループTControl | このコントロールは、Page 要素内の Data 要素に保存されているデータを編集するために使用します。 |
| FieldElementControl | このコントロールはフィールドを編集するために使用します。このフィールドは通常、.xaml ページ上のテキスト ボックス コントロールにリンクされています。 |
| SetterControl | このコントロールは、UDI ウィザード構成ファイル内の setter 要素の値を変更するために使用されます。 |
製品グループTControl
このコントロールは、データを編集するための多くの機能を提供します。 このコントロールの使用方法を学ぶ最善の方法は、ページの Data 要素の下のデータを編集する方法を示すサンプルを確認することです。 特に、このサンプルでは、このコントロール内の項目を追加、削除、編集する方法を示します。
FieldElementControl
このコントロールを使用してフィールドを編集します。このフィールドは通常、.xaml ページ上の テキスト ボックス コントロールにリンクされています。
例
次に、.xaml ファイルからの抜粋は、子テキスト ボックス コントロールを使用してウィザード ページのフィールドの既定値を構成するために FieldElementControl を使用する方法を示しています。
<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
この string プロパティには、フィールドの基礎となる XML に FieldElementControl を接続するための情報が含まれています。 この接続は、ページ エディター インターフェイスのプロパティに対して行われます。 次に、.xaml ファイルからの抜粋に、 FieldData プロパティの使用方法を示します。
FieldData="{Binding DataContext.Location, ElementName=ControlRoot}"
この抜粋では、ページ エディター インターフェイスは ControlRoot と呼ばれ、 ElementName パラメーターで指定されています。 バインドは、ControlRoot ページ エディター インターフェイスの DataContext.Location プロパティに対して実行されます。 DataContext は、UDI ウィザード構成ファイル内の Page 要素を指すビュー モデルです。 場所は 、使用可能な場所の一覧を返すビューのプロパティであり、UDI ウィザード構成ファイル内の Data 要素によって定義されます。 各場所は、UDI ウィザード構成ファイル内の DataItem 要素によって定義されます。
HeaderText
この文字列プロパティを使用すると、 FieldElementControl コントロールのヘッダーを指定できます。 ヘッダーはコントロールのタイトルとして機能し、コントロールのすぐ上に表示される太字のオレンジ色のテキストとして書式設定されます。
InstructionText
この文字列プロパティを使用すると、 FieldElementControl コントロールの情報テキストを指定できます。 通常、テキストは、フィールドの簡単な説明を提供し、フィールドの構成が対応するウィザード ページにどのように影響するかを説明するために使用されます。
HideEnableButton
このブール型プロパティを使用すると、 状態をロック解除 と ロック (有効または無効) の間で変更するボタンの表示を制御できます。 以下に設定した場合:
True。ボタンは表示されません
False の場合はボタンが表示されています (これが既定値です)。
HideDefaultTab
このブール値プロパティを使用すると、既定値の設定に使用するコントロールを含むセクションの可視性を制御できます。 このプロパティはタブを参照していますが、 FieldElementControl にはタブがなく、非表示にできるセクションがあります。 以下に設定した場合:
はい。セクションは表示されません
False の場合は、セクションが表示されます (これが既定値です)。
HideBorder
このブール型プロパティを使用すると、フィールド コントロールの周囲の境界線の可視性を制御できます。 以下に設定した場合:
確かに、境界線は表示されていません
False の場合は境界線が表示されます (これが既定値です)。
HideImage
このブール値プロパティを使用すると、 FieldImageSource プロパティが構成する画像の可視性を制御できます。 以下に設定した場合:
確かに、画像は表示されません
false の場合は画像が表示されます (これが既定値です)。
HideValidationTab
このブール型プロパティを使用すると、バリデーターのリストが管理されるセクションの可視性を制御できます。 このプロパティはタブを参照していますが、 FieldElementControl にはタブがなく、非表示にできるセクションがあります。 以下に設定した場合:
はい。セクションは表示されません
False の場合は、セクションが表示されます (これが既定値です)。
HideSummaryTab
このブール型プロパティを使用すると、フィールド サマリー キャプションを構成するセクションの可視性を制御できます。 フィールドのキャプションと対応する値は、ステージ フローの SummaryPage ウィザード ページ タイプに表示されます。 このプロパティはタブを参照していますが、 FieldElementControl にはタブがなく、非表示にできるセクションがあります。 以下に設定した場合:
はい。セクションは表示されません
False の場合は、セクションが表示されます (これが既定値です)。
HideTaskSequenceTab
このブール型プロパティを使用すると、フィールドに対応するタスク シーケンス変数を構成するセクションの可視性を制御できます。 このプロパティはタブを参照していますが、 FieldElementControl にはタブがなく、非表示にできるセクションがあります。 以下に設定した場合:
はい。セクションは表示されません
False の場合は、セクションが表示されます (これが既定値です)。
SetterControl
UDI ウィザード構成ファイルの Setter 要素の値を変更するには、このコントロールを使用します。 このコントロールには、 setter 要素の値を変更するために使用される子コントロールが含まれています。
例
次に、.xaml ファイルからの抜粋は、SetterControl を使用して、子テキスト ボックス コントロールを使用して KeyLocationSetter という名前の Setter 要素を変更する方法を示しています。
<Controls:SetterControl Margin="5"
Width="450"
HeaderText="Title text"
SetterData="{Binding KeyLocationSetter}"
InstructionText="What this means..."
HorizontalAlignment="Left">
<TextBox
Margin="0,3"
Text="{Binding SetterData.SetterValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
</Controls:SetterControl>
プロパティ
SetterData
これを、セッターに接続するビューまたはビュー モデルのプロパティにバインドする必要があります。 これは、 FieldElementControl で説明されているように、フィールドにバインドする方法と似ています。
HeaderText
このプロパティを使用すると、コントロールのヘッダーに表示されるテキストを設定できます。 このプロパティはコントロールのタイトルと考えてください。既定では、太字のオレンジ色のテキストとして表示されます。
InstructionText
このプロパティを、ヘッダーの下に表示するテキスト (通常は、カスタム エディターのユーザーにフィールドの動作を変更するタイミングと理由を伝える指示テキスト) に設定します。
インターフェイス
表 70 に、カスタム・ウィザード・ページ・エディタの作成に使用できるインタフェースを示します。
表 70 カスタム ウィザード ページ エディターの作成に使用できるインターフェイス
| インターフェイス | 説明 |
|---|---|
| IDataService | このインタフェースを使用して、UDI ウィザード構成ファイルの データ 要素にフィールドを接続します。 |
| 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(文字列メッセージ、文字列キャプション、MessageBoxImage アイコン) - ShowMessageBox(文字列メッセージ, 文字列キャプション, MessageBoxButton ボタン, MessageBoxImage アイコン) - ShowMessageBox(例外例外) |
| ShowDialogWindow | この方法を使用して、新しいダイアログ ボックスを作成します。 |
| ShowWizardWindow | このメソッドを使用すると、ナビゲーション用の [ 次へ ] ボタンと [戻る ] ボタンが含まれるダイアログ ボックス内にカスタム エディターが表示されます。 |
ShowMessageBox
この方法では、カスタム ウィザード ページ エディターの子であるメッセージ ボックスが表示されます。 このメンバーにはオーバーロードされています。表 73 には、メンバーの一覧とそれぞれの簡単な説明が含まれています。 各メンバー (構文、使用法、例を含む) の詳細については、各メンバーに対応するセクションを参照してください。
表 73 ShowMessagBox メソッドのオーバーロードされたメンバー
| メンバー | 説明 |
|---|---|
| ShowMessageBox(文字列メッセージ、文字列キャプション、MessageBoxImage アイコン) | アイコンと [OK ] ボタンを含むメッセージ ボックスを表示します |
| ShowMessageBox(文字列メッセージ, 文字列キャプション, MessageBoxButton ボタン, MessageBoxImage アイコン) | アイコンとさまざまなボタンの組み合わせが可能なメッセージ ボックスを表示します |
| ShowMessageBox(例外例外) | 例外に関する情報を提供するメッセージ ボックスと [OK ] ボタンを表示 |
ShowMessageBox(文字列メッセージ、文字列キャプション、MessageBoxImage アイコン)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);
この方法では、[ OK ] ボタン付きのメッセージ ボックスが表示されます。 表 74 を参照してください。
表 74 ShowMessageBox(文字列メッセージ、文字列キャプション、MessageBoxImage アイコン) メソッドのパラメーター
| パラメーター | 説明 |
|---|---|
| message | メッセージ ボックスのコンテンツ領域に表示するメッセージ |
| caption | ダイアログ ボックスのタイトル バーに表示するテキスト |
| icon | メッセージ ボックスに表示するアイコンの種類 |
ShowMessageBox(文字列メッセージ, 文字列キャプション, 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);
このメソッドは、例外に関する情報を報告するメッセージ ボックスを表示します。 このメッセージ ボックスには、[ OK ] ボタンが 1 つあります。 表 76 を参照してください。
表 76 ShowMessageBox(Exception exception) メソッドのパラメーター
| パラメーター | 説明 |
|---|---|
| 例外 | 報告する例外 (ダイアログ ボックスでは [例外] が使用され ます。メッセージの内容 。) |
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);
このメソッドでは、新しいダイアログ ボックスが作成され、その内容は viewType パラメーターに指定したテキストです。 UDI Designer は、この種類の新しいインスタンスを作成し、[OK] ボタンと [キャンセル] ボタンがあるダイアログ ボックスにラップします。
dialogPayload パラメーターを使用してコントロールにデータを渡します。 SDK ディレクトリの SampleEditor ソリューションには、この機能を使用する方法の例があります。
ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);
この方法では、ナビゲーション用の [ 次へ ] ボタンと [戻る ] ボタンを含むダイアログ ボックス内にカスタム エディターを表示できます。 Microsoft は、このメソッドを使用する方法のサンプルを提供していません。
UDI ウィザード構成ファイル スキーマ参照
このファイルは UDI ウィザードによって使用され、UDI ウィザード Designer によって設定されます。 このファイルは、次の構成に使用します。
UDI ウィザードに表示されるウィザード ページ
UDI ウィザード内のウィザード ページの順序
各ウィザード ページのフィールドの設定
UDI ウィザード Designer で使用可能な StageGroup
UDI ウィザード Designer の各デプロイ ウィザード内で使用可能なステージ
77 に、UDI ウィザード構成ファイルの要素とその説明を示します。 ウィザード要素は、この参照のルート ノードです。
表 77 UDI ウィザード構成ファイルの要素とその説明
| 要素名 | 説明 |
|---|---|
| Data | Page 要素内の個々の DataItem 要素をグループ化し、Name 属性によって名前が付けられます。 |
| DataItem | Page 要素内の個々の Setter 要素をグループ化します。 DataItem 要素内に 1 つ以上の Data 要素を含めることで、階層データを作成できます。 各 DataItem 要素は、個々の項目を表します。 たとえば、使用可能なドライブの一覧に、表示名の DataItem と対応するドライブ文字の別の DataItem 要素がある場合があります。 |
| Default | 親の Field または RadioGroup 要素で指定されているフィールドの既定値を指定します。 既定値は、この要素で囲まれた値に設定されます。 |
| DLL | UDI ウィザードおよび UDI ウィザード Designer によって読み込まれて参照される DLL を指定します。 |
| DLL | 個々の DLL 要素をグループ化します。 |
| Error | タスクが返すことができるエラー コードを指定します。 エラー コードの値はタスクの HRESULT によって返され、より具体的なエラー情報を提供するためにこの要素によってトラップされます。 |
| ExitCode | タスクの可能な終了コードを指定します。 出口コードは、タスクで想定されるリターン コードです。 使用可能な終了コードごとに ExitCode 要素を作成します。 それ以外の場合は、 Value 属性にアスタリスク (*) を指定して、他の ExitCode 要素に一覧表示されていないリターン コードを処理できます。 |
| ExitCodes | Task 要素または Error 要素の ExitCode 要素と Error 要素のセットをグループ化します。 |
| Field | XML によるカスタマイズを提供するために使用される Page 要素内のコントロールのインスタンスを指定します。 すべてのコントロールが XML を使用したカスタマイズを許可するわけではありません。 Field 要素を使用するコントロールのみです。 |
| フィールド | Page 要素内の個々の Field 要素をグループ化します。 |
| ファイル | タスクの種類 Microsoft.Wizard.CopyFilesTask を使用して、ファイル コピー操作のソースとコピー先を指定します。 1 つのタスクに複数のファイルをコピーするには、別の File 要素を含めることができます。 |
| Page | ページのインスタンスを指定し、ページのすべての構成設定を含めます。 |
| PageRef | StageGroup 内のステージ内のページのインスタンスへの参照を指定します。 |
| Pages | 個々の Page 要素をグループ化します。 |
| RadioGroup | Field 要素内のラジオ ボタンのグループを指定します。 |
| StageGroup | 1 つ以上のステージのグループを指定します。 |
| StageGroups | UDI ウィザード構成ファイル内の一連のステージ グループをグループ化します。 |
| セッター | Property プロパティで名前が付けられたプロパティの値のプロパティ設定を指定します。 |
| ステージ | StageGroup 内のステージを示し、1 つ以上の PageRef 要素を含めます。 |
| スタイル | ウィザードの上部に表示されるタイトルや UDI ウィザードに表示されるバナー イメージなど、UDI ウィザードのルック アンド フィールを構成する個々の セッター 要素をグループ化します。 |
| タスク | 親の Page 要素で指定されたページで実行されるタスクを指定します。 |
| タスク | Page 要素の一連のタスクをグループ化します。 |
| Validator | 親の Field 要素で指定されているフィールド コントロールの検証子を指定します。 |
| ウィザード | 他のすべての要素のルートを指定します。 |
データ
この要素は、Page 要素内の個々の DataItem 要素をグループ化し、Name 属性によって名前が付けられます。
要素の情報
表 78 に 、データ 要素に関する情報を示します。
表 78 データ要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各 Page 要素内の 0 個以上 (この要素は省略可能です。) |
| 親要素 | ページ、 データ項目 |
| コンテンツ | DataItem、 Setter |
要素の属性
表 79 に、 Data 要素の属性とそれぞれの説明を示します。
表 79 データ要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| 名前 | データ要素の名前を指定します |
注釈
Name 属性を使用すると、コードで特定のデータ セットを取得できます。
例
なし。
DataItem
この要素は、Page 要素内の個々の Setter 要素をグループ化します。 DataItem 要素内に 1 つ以上の Data 要素を含めることで、階層データを作成できます。 各 DataItem 要素は、個々の項目を表します。 たとえば、使用可能なドライブの一覧に、表示名の DataItem と対応するドライブ文字の別の DataItem 要素がある場合があります。
要素の情報
表 80 DataItem 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各 Data 要素内で 0 以上 (この要素は省略可能です) |
| 親要素 | Data |
| コンテンツ | データ、 セッター |
要素の属性
この要素には属性はありません。
注釈
なし。
例
なし。
既定値
この要素は、親の Field または RadioGroup 要素で指定されているフィールドの既定値を指定します。 既定値は、この要素が角かっこで囲む値に設定されます。
要素の情報
表 81 に、 Default 要素に関する情報を示します。
表 81 既定の要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | Field または RadioGroup 要素内の 0 以上 (この要素は省略可能です。) |
| 親要素 | Field, RadioGroup |
| コンテンツ | 整形式の XML コンテンツを指定できますが、通常は標準テキストです |
要素の属性
この要素には属性はありません。
注釈
なし。
例
次の例では、[TimeZone] フィールドのデフォルトは "Pacific Standard Time" に設定されています。
<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">
<Default>Pacific Standard Time</Default>
DLL
この要素は、UDI ウィザードおよび UDI ウィザード Designer が読み込んで参照する DLL を指定します。
要素の情報
表 82 に、 DLL 要素に関する情報を示します。
表 82 DLL 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | DLL 要素内の 1 つ以上 |
| 親要素 | DLL |
| コンテンツ | この要素に許可されるコンテンツはありません |
要素の属性
表 83 に、 DLL 要素の属性とそれぞれの説明を示します。
表 83 DLL 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| 名前 | UDI ウィザードおよび UDI ウィザード Designer が参照する DLL の名前を指定します |
注釈
なし。
例
<DLLs>
<DLL Name="OSDRefreshWizard.dll" />
<DLL Name="SharedPages.dll" />
</DLLs>
DLL
この要素は、個々の DLL 要素をグループ化します。
要素の情報
表 84 に、 DLL 要素に関する情報を示します。
表 84 DLL 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | One |
| 親要素 | ウィザード |
| コンテンツ | DLL |
要素の属性
この要素には属性はありません。
注釈
なし。
例
<DLLs>
<DLL Name="OSDRefreshWizard.dll" />
<DLL Name="SharedPages.dll" />
</DLLs>
Error
この要素は、タスクが返すことができるエラー コードを指定します。 エラー コードの値は、より具体的なエラー情報を提供するために、タスクの HRESULT によって返され、トラップされます。
要素の情報
表 85 に、 Error 要素に関する情報を示します。
表 85 エラー要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各 ExitCode 要素内の 0 以上 (この要素は省略可能です。) |
| 親要素 | ExitCodes |
| コンテンツ | 整形式の XML コンテンツ |
要素の属性
表 86 に、 Error 要素の属性とそれぞれの説明を示します。
表 86 エラー要素情報
| 属性 | 説明 |
|---|---|
| 状態 | エラーが発生したタスクの戻り状態を指定します。 通常、この属性の値は Error に設定されます。 この値は、UDI ウィザードのウィザード ページの [ 状態 ] 列に表示されます。 |
| テキスト | タスクで発生したエラー条件に関する説明テキストを指定します。 |
| Type | この要素がエラー、警告、または成功のいずれを表すかを指定します。
Type に指定した値は、ExitCodes 要素内で一意である必要があります。 この要素の有効な値を次に示します。 - **0.**要素は成功を表します。 - 1. 要素は警告を表します。 - -1. この要素はエラーを表しています。 |
| 値 | タスクが返すコードの値を数値として指定します。 アスタリスク (*) の値を指定すると、他の エラー要素 に一覧表示されていないリターン コードの既定の要素を示します。 |
注釈
なし。
例
なし。
ExitCode
この要素は、タスクの可能な終了コードを指定します。 出口コードは、タスクで想定されるリターン コードです。 使用可能な終了コードごとに ExitCode 要素を作成します。 それ以外の場合は、 Value 属性にアスタリスク (*) を指定して、他の ExitCode 要素に一覧表示されていないリターン コードを処理できます。
要素の情報
表 87 に、 ExitCode 要素に関する情報を示します。
表 87 ExitCode 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各 ExitCodes 要素内の 0 以上 (この要素は省略可能です。) |
| 親要素 | ExitCodes |
| コンテンツ | 1 つ以上の ExitCode 要素と 0 個以上の Error 要素 |
要素の属性
表 88 に、 ExitCode 要素の属性を示し、それぞれの説明を示します。
表 88 ExitCode 要素の属性と対応する値
| Attribute | 説明 |
|---|---|
| 状態 | タスクの戻り状態を指定します。 この属性の値は、UDI ウィザードの対応するウィザード ページの [状態 ] 列に表示されます。 この属性には、タスクにとって意味のある任意の値を使用できます。 この属性に使用される一般的な値を次に示します。 - 成功 - 警告 - エラー |
| テキスト | タスクの存在コードに関する説明テキストを指定します。 |
| Type | この要素がエラー、警告、または成功のいずれを表すかを指定します。 type で指定された値は、 ExitCodes 要素内で一意である必要があります。 この要素の有効な値を次に示します。 - 0. 要素は成功を表します。 - 1. 要素は警告を表します。 - -1. この要素はエラーを表しています。 |
| 値 | タスクが返すコードの値を数値として指定します。 アスタリスク (*) の値を指定すると、他の ExitCode 要素の一覧にないリターン コードの既定の要素を示します。 |
注釈
なし。
例
なし。
ExitCodes
この要素は、Task 要素または Error 要素の ExitCode 要素と Error 要素のセットをグループ化します。
要素の情報
表 89 に、 ExitCodes 要素に関する情報を示します。
表 89 ExitCodes 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各 Task 要素内に 1 つ |
| 親要素 | タスク |
| コンテンツ | エラー、 ExitCode |
要素の属性
この要素には属性はありません。
注釈
なし。
例
なし。
フィールド
この要素は、XML を使用してカスタマイズを提供するために使用される Page 要素内のコントロールのインスタンスを指定します。 すべてのコントロールが XML を使用したカスタマイズを許可するわけではありません。 Field 要素を使用するコントロールのみです。
要素の情報
表 90 に、 フィールド 要素に関する情報を示します。
表 90 フィールド要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各 Field 要素内の 0 個以上 (この要素は省略可能です。) |
| 親要素 | フィールド |
| コンテンツ | デフォルト、 バリデーター |
要素の属性
表 91 に、 フィールド 要素の属性とそれぞれの説明を示します。
表 91 フィールド要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| Enabled (有効) | フィールドをユーザー入力に対して有効にするかどうかを指定します (属性は True または False に設定できます)。 |
| 名前 | フィールドの名前を指定します |
| 概要 | このフィールドが設定する値について、[ 概要ウィ ザード] ページに表示される説明テキストを指定します |
| VarName | 親の Field 要素のフィールドを使用して読み取りまたは構成されるタスク シーケンス変数名を指定します |
注釈
この要素には、0 個以上の Default 要素と 0 個以上の Validator 要素を含めることができます。
例
なし。
フィールド
この要素は、Page 要素内の個々の Field 要素をグループ化します。
要素の情報
表 92 に、 Fields 要素に関する情報を示します。
表 92 フィールド 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各 Page 要素内の 0 個以上 (この要素は省略可能です。) |
| 親要素 | Page |
| コンテンツ | Field, RadioGroup |
要素の属性
この要素には属性はありません。
注釈
なし。
例
なし。
File
この要素は、 タスクの種類 Microsoft.Wizard.CopyFilesTask を使用して、ファイル コピー操作のコピー元とコピー先を指定します。 1 つのタスクに複数のファイルをコピーするには、別の File 要素を含めることができます。
要素の情報
表 93 に、 File 要素に関する情報を示します。
表 93 ファイル要素の情報
| Attribute | 値 |
|---|---|
| 発生回数 | タスクの種類が Microsoft.Wizard.CopyFilesTask のタスクごとに 1 つ以上 |
| 親要素 | タスク |
| コンテンツ | なし |
要素の属性
表 94 に、 File 要素の属性とそれぞれの説明を示します。
表 94 ファイル要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| 宛先 | ソース属性で指定されたファイルの完全修飾パスまたは移動先フォルダーへの相対パスを指定します。 環境変数はパスの一部として使用できます。 |
| Source | Microsoft.Wizard.CopyFilesTask タスクの種類がコピーするソース ファイルへの完全修飾パスまたは相対パスを指定します。 この属性はワイルドカード文字をサポートするので、1 つの File 要素を使用して複数のファイルをコピーできます。 環境変数はパスの一部として使用できます。 |
注釈
なし。
例
なし。
Page
この要素はページのインスタンスを指定し、ページのすべての構成設定を含みます。
要素の情報
表 95 に、 Page 要素に関する情報を示します。
表 95 ページ要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各 Pages 要素内の 1 つ以上 |
| 親要素 | Pages |
| コンテンツ | データ、 フィールド、 セッター、 タスク |
要素の属性
表 96 に、 Page 要素の属性とそれぞれの説明を示します。
表 96 Page 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| DisplayName | UDI ウィザード Designer に表示されるウィザード ページのわかりやすい名前を指定します。 通常、この名前は Name 属性よりもわかりやすくなります。 |
| 名前 | UDI ウィザード Designer に表示されるウィザード ページの名前を指定します。 |
| Type | DLL 内の特定のウィザード ページに直接関連するウィザード ページの種類を指定します。 |
注釈
なし。
例
なし。
PageRef
この要素は、StageGroup 内のステージ内のページのインスタンスへの参照を指定します。
要素の情報
PageRef 要素に関する情報を表 97 に示します。
表 97 PageRef 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | Stage 要素内の 1 つ以上 |
| 親要素 | ステージ |
| コンテンツ | なし |
要素の属性
表 98 に、 PageRef 要素の属性とその説明を示します。
表 98 PageRef 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| Page | StageGroup 内のステージ内のページのインスタンスを指定します。 この値を Page 要素の Name 属性に設定します。 |
注釈
なし。
例
なし。
ページ
この要素は、個々の Page 要素をグループ化します。
要素の情報
表 99 に、 Pages 要素に関する情報を示します。
表 99 ページ要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | One |
| 親要素 | ウィザード |
| コンテンツ | 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 ウィザード Designer に表示されるステージ グループのわかりやすい名前を指定します。 通常、この名前は Name 属性よりもわかりやすくなります。 |
注釈
なし。
例
なし。
StageGroups
この要素は、UDI ウィザード構成ファイル内の一連のステージ グループをグループ化します。
要素の情報
StageGroups 要素に関する情報を表 104 に示します。
表 104 StageGroups 要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | ウィザード要素内の 0 または 1 |
| 親要素 | ウィザード |
| コンテンツ | StageGroup |
要素の属性
この要素には属性はありません。
注釈
なし。
例
なし。
セッター
この要素は、 Property プロパティで名前が付けられたプロパティの値のプロパティ設定を指定します。
要素の情報
表 105 に、 Setter 要素に関する情報を示します。
表 105 セッター要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各親要素内の 0 以上 (この要素は省略可能です。) |
| 親要素 | データ, データ項目, ページ, スタイル, タスク, バリデーター |
| コンテンツ | Property 属性に文字列値が含まれる |
要素の属性
表 106 に、 Setter 要素の属性とその説明を示します。
表 106 Setter 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| プロパティ | 設定するプロパティ名を指定します。 プロパティ名は、この属性の角かっこで囲む値に設定されます。 |
注釈
なし。
例
なし。
ステージ
この要素は、StageGroup 内のステージを指定し、1 つ以上の PageRef 要素を含みます。
要素の情報
表 107 に、 Stage 要素に関する情報を示します。
表 107 ステージ要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | StageGroup 要素内の 1 つ以上 |
| 親要素 | StageGroup |
| コンテンツ | PageRef |
要素の属性
表 108 に、 Stage 要素の属性とそれぞれの説明を示します。
表 108 Stage 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| DisplayName | UDI ウィザード Designer に表示されるウィザード ページのわかりやすい名前を指定します。 通常、この名前は Name 属性よりもわかりやすくなります。 |
| 名前 | ステージの名前を指定します。 この要素の値は、 /stage: name コマンド ライン パラメーターを使用して UDI ウィザードを開始するときに使用されます。 |
注釈
なし。
例
なし。
Style
この要素は、ウィザードの上部に表示されるタイトルや UDI ウィザードに表示されるバナー イメージなど、UDI ウィザードのルック アンド フィールを構成する個々の Setter 要素をグループ化します。
要素の情報
表 109 に、Style 要素に関する情報を示します。
表 109 スタイル要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | One |
| 親要素 | ウィザード |
| コンテンツ | セッター |
要素の属性
この要素には属性はありません。
注釈
なし。
例
<Style>
<Setter Property="bannerFilename">UDI_Wizard_Banner.bmp</Setter>
<Setter Property="title">Operating System Deployment (OSD) Refresh Wizard</Setter>
</Style>
タスク
この要素は、親の Page 要素で指定されたページで実行されるタスクを指定します。
要素の情報
表 110 に、 Task 要素に関する情報を示します。
表 110 タスク要素の情報
| Attribute | 値 |
|---|---|
| 発生回数 | Tasks 要素内の 1 つ以上 |
| 親要素 | タスク |
| コンテンツ | ExitCodes, File, Setter |
要素の属性
表 111 に、 Task 要素の属性と各属性の説明を示します。
表 111 タスク要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| DependsOn | タスクが別のタスクに依存しているかどうかを指定します。 この属性の値は、別の Task 要素の Name 属性に設定されています。 メモ:この属性は、UDI ウィザード Designer を使用して構成できません。 ただし、.xml ファイルを直接変更することで、この属性を Task 要素に手動で追加できます。 |
| DisplayName | UDI ウィザード Designer に表示されるタスクのわかりやすい名前を指定します。 通常、この名前は Name 属性よりもわかりやすくなります。 |
| 名前 | タスクの名前を指定します。 この名前は一意である必要があります。 |
| 型 | 実行するタスクのタスクの種類を指定します。これは、タスクを含む DLL で定義されます。 |
注釈
なし。
例
なし。
タスク
この要素は、 Page 要素の一連のタスクをグループ化します。
要素の情報
Tasks 要素に関する情報を表 112 に示します。
表 112 タスク要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | 各 Page 要素内の 0 または 1 (この要素は省略可能です) |
| 親要素 | Page |
| コンテンツ | タスク |
要素の属性
表 113 に、 Tasks 要素の属性と各属性の説明を示します。
表 113 Tasks 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| NameTitle | 適切なウィザード ページのタスクの名前を含む列の上部に表示されるキャプションを指定します。 |
| StatusTitle | 適切なウィザード ページのタスクの状態を含む列の上部に表示されるキャプションを指定します。 |
注釈
なし。
例
なし。
Validator
この要素は、親の Field 要素 で指定されているフィールド コントロールの検証子を指定します。
要素の情報
表 114 に、 Validator 要素に関する情報を示します。
表 114 バリデーター要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | フィールド 要素内の 0 または 1 |
| 親要素 | Field |
| コンテンツ | セッター |
要素の属性
表 115 に、 Validator 要素の属性とその説明を示します。
表 115 Validator 要素の属性と対応する値
| 属性 | 説明 |
|---|---|
| 型 | バリデーターを含む DLL で定義されるバリデーターの型を指定します |
注釈
なし。
例
なし。
ウィザード
この要素は、他のすべての要素のルートを指定します。
要素の情報
表 116 に、 ウィザード 要素に関する情報を示します。
表 116 ウィザード要素情報
| Attribute | 値 |
|---|---|
| 発生回数 | One |
| 親要素 | なし |
| コンテンツ | DLL、 ページ、 StageGroups、 スタイル |
要素の属性
この要素には属性はありません。
注釈
なし。
例
<Wizard>
+ <DLLs>
+ <Style>
+ <Pages>
+ <StageGroups>
</Wizard>