Debugging Tools for Windowsを使用して、ダイナミック リンク ライブラリ に基づくカスタム アクションをデバッグできます。 カスタム アクションは、実行可能ファイル 、 またはスクリプト に基づいている場合、動的デバッグを使用することはできません。
このセクションで説明する手法は、Windows インストーラーのカスタム アクションをデバッグするのに役立ちます。 Windows 用デバッグ ツールの詳細については、Windows ドライバー キット (WDK) の「ドライバー開発ツール」セクション参照してください。
Windows インストーラーでは、MsiBreak 環境変数を使用して、デバッグするカスタム アクションを決定します。 カスタム アクションのソース コードにアクセスできる場合は、MsiBreak なしでデバッグを使用できる場合があります。 MsiBreak を使用せずにデバッグを開始するには、アクションのコードの先頭に一時的なメッセージ ボックスを配置します。 インストール中にメッセージ ボックスが表示されたら、メッセージ ボックスを所有するプロセスにデバッガーをアタッチします。 その後、必要なブレークポイントを設定し、メッセージ ボックスを閉じて実行を再開できます。 このメソッドでは、カスタム アクションの以前の部分をデバッグすることはできません。
MsiBreak 環境変数を使用してカスタム アクションをデバッグするには、CustomAction テーブルのカスタム アクションの名前に MsiBreak を設定します。 MsiBreak には、システム環境変数またはユーザー環境変数のいずれかを指定できます。 変数がシステム変数として設定されている場合は、新しい値を検出するために値が変更されたときにシステムの再起動が必要になる場合があります。
MsiBreak 環境変数を使用して埋め込みユーザー インターフェイスをデバッグするには、MsiBreak の値を MsiEmbeddedUI に設定します。
Windows インストーラーは、ユーザーが管理者の場合にのみ MsiBreak 環境変数をチェックします。 ユーザーが管理者でない場合、インストーラーは MsiBreak の値を無視します。これは、マネージド アプリケーションであっても無視されます。
実行シーケンスで昇格された (システム) 特権で実行されるカスタム アクションをデバッグする場合は、デバッガーを Windows インストーラー サービスにアタッチします。 実行シーケンスで権限を借用して実行されるカスタム アクションをデバッグすると、デバッグする必要があるプロセスを示すダイアログ ボックスが表示されます。 デバッグするプロセスを示すダイアログ ボックスが表示されます。 昇格されたカスタム アクションの詳細については、「カスタム アクションセキュリティ 」を参照してください。
デバッガーが正しいプロセスにアタッチされると、インストーラーは DLL のエントリ ポイントを呼び出す直前にデバッガー ブレークポイントをトリガーします。 ブレークポイントでは、DLL は既にプロセスに読み込まれており、エントリ ポイント のアドレスが決定されています。 カスタム アクション DLL を読み込めなかった場合、またはカスタム アクション エントリ ポイントが存在しなかった場合、ブレークポイントはトリガーされません。 ブレークポイントは DLL 関数を呼び出す前にトリガーされるため、ブレークポイントがトリガーされたら、カスタム アクション エントリ ポイントが呼び出されるまでデバッガーを使用してステップ フォワードする必要があります。 または、カスタム アクションの任意の場所にブレークポイントを設定し、通常の実行を再開することもできます。
Windows インストーラーは、dll の場所から直接 バイナリ テーブルに格納されていない DLL を実行します。 インストーラーは、バイナリ テーブルに格納されている DLL の元の名前を認識せず、一時ファイル名で DLL カスタム アクションを実行します。 一時ファイル名の形式は MSI です?????.TMP。 Windows XP では、この一時ファイルはセキュリティで保護された場所 (一般的に WindowFolder>\Installer <) に格納されます。
デバッグ用に作成された多くの DLL には、DLL 自体の一部として対応する PDB ファイルの名前とパスが含まれていることに注意してください。 DLL に格納されている場所に PDB が見つかるシステムでこの種類の DLL をデバッグすると、デバッガー ツールによってシンボルが自動的に読み込まれる場合があります。 保存されている場所で PDB が見つからない場合、デバッガーが格納されている場所からのシンボルの読み込みをサポートしていない場合、または DLL がデバッグ情報でビルドされていない場合は、一時 DLL ファイルを含むフォルダーにシンボル ファイルを配置する必要があります。
インストーラーは、カスタム アクション スクリプトのデバッグ情報をインストール ログ ファイルに追加します。
There is a problem with this Windows Installer package. A script
required for this install to complete could not be run. Contact your
support personnel or package vendor. {Custom action [2] script error
[3], [4]: [5] Line [6], Column [7], [8] }