コンポーネント テーブル
コンポーネント テーブルにはコンポーネントが一覧表示され、次の列があります。
Column | 種類 | キー | Nullable |
---|---|---|---|
コンポーネント | 識別子 | ○ | N |
ComponentId | GUID | N | ○ |
Directory_ | 識別子 | N | N |
属性 | 整数 | N | N |
条件 | Condition | N | ○ |
キーパス | 識別子 | N | ○ |
列
-
コンポーネント
-
コンポーネント レコードを識別します。
主テーブル キー。
-
ComponentId
-
このコンポーネント、バージョン、および言語に固有の文字列 GUID。
これらの GUID の文字は大文字である必要があることに注意してください。 GUIDGEN などのユーティリティでは、小文字を含む GUID を生成できます。 これらの有効なコンポーネント コード GUID を作成するには、小文字を大文字に変更する必要があります。
この列が null の場合、インストーラーはコンポーネントを登録せず、インストーラーによってコンポーネントを削除または修復することはできません。 これは、一時ファイルをクリーンアップするカスタム アクションや古い製品を削除するカスタム アクションなど、インストール中にのみコンポーネントが必要な場合に意図的に行われる可能性があります。 また、登録する必要のないユーザーのコンピューターにデータ ファイルをコピーする場合にも便利です。
-
Directory_
-
ディレクトリ テーブル内のエントリの外部キー。 これは、値に実際のパスが含まれているプロパティ名です。これは、 AppSearch アクション によって設定することも、ディレクトリ テーブルから取得した既定の設定で設定することもできます。
開発者は、ユーザー プロファイル フォルダーのいずれかにファイルを配置するコンポーネントの作成を避ける必要があります。 これらのファイルは、マルチユーザーの状況ですべてのユーザーが使用できるとは限らず、修復が必要であるとインストーラーがコンポーネントを永続的に表示する可能性があります。
ディレクトリ テーブルの列 1 への外部キー。
-
属性
-
この列には、リモート実行のオプションを指定するビット フラグが含まれています。 指定したビットを列の合計値に追加して、オプションを含めます。
注意
Web の場所からダウンロードされる.msi ファイルの場合は、コンポーネントをソースから実行できるように属性フラグを設定しないでください。 これは、Windows インストーラーの制限であり、INSTALLSTATE_BADCONFIGの機能状態を返すことができます。
ビット フラグ - msidbComponentAttributesLocalOnly
- 0
- 0x0000
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
HKCU Hive に書き込まれたレジストリ エントリには、このビットを設定することをお勧めします。 これにより、インストーラーは、同じコンピューターに複数のユーザーが存在する場合に必要な HKCU レジストリ エントリを書き込みます。- msidbComponentAttributesSharedDllRefCount
- 8
- 0x0008
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
このビットは推移的なコンポーネントに対してのみ設定する必要があります。 推移的コンポーネントの使用を参照してください。- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
このフラグは、レジストリ テーブルによって登録されているコンポーネントに対してのみ使用します。 AppId、Class、Extension、ProgId、MIME、Verb の各テーブルによって登録されたコンポーネントには、このフラグを使用しないでください。- msidbComponentAttributes64bit
- 256
- 0x0100
これが 32 ビット コンポーネントを置き換える 64 ビット コンポーネントの場合は、このビットを設定し、ComponentId 列に新しい GUID を割り当てます。- msidbComponentAttributesDisableRegistryReflection
- 512
- 0x0200
[!注]
64 ビット Windows エミュレーター (WOW64) で実行されている 32 ビット Windows アプリケーションは、64 ビット アプリケーションとは異なるレジストリビューを参照します。 レジストリ リフレクションでは、これら 2 つのレジストリ ビューの間にいくつかのレジストリ値がコピーされます。- msidbComponentAttributesUninstallOnSupersedence
- 1024
- 0x0400
MSIUNINSTALLSUPERSEDEDCOMPONENTS プロパティの設定は、すべてのコンポーネントに対してこのビットを設定する場合と同じ効果があります。
インストーラー 4.0 以前をWindowsします。msidbComponentAttributesUninstallOnSupersedence 値はサポートされておらず、無視されます。- msidbComponentAttributesShared
- 2048
- 0x0800
DisableSharedComponent ポリシーが 1 に設定されている場合、このビットで有効になっている共有コンポーネント機能はパッケージで取得されません。
インストーラー 4.0 以前をWindowsします。msidbComponentAttributesShared 値はサポートされておらず、無視されます。 -
条件
-
この列には、コンポーネントがインストールされているかどうかを制御できる条件付きステートメントが含まれています。 条件が null または true と評価された場合は、コンポーネントが有効になります。 条件が False と評価された場合、コンポーネントは無効になり、インストールされません。
[条件] フィールドでは、 CostFinalize アクション中にのみコンポーネントを有効または無効にします。 CostFinalize 後にコンポーネントを有効または無効にするには、カスタム アクションまたは DoAction ControlEvent を使用して MsiSetComponentState を呼び出す必要があります。
[属性] 列の推移ビットがコンポーネントに対して設定されていない限り、後続のメンテナンス インストールで後で [条件] 列の条件ステートメントが False と評価された場合でも、コンポーネントはインストール後も有効のままであることに注意してください。
コンポーネント テーブルの [条件] 列では、インストールされている機能とコンポーネントの状態への参照を含む条件式を受け入れます。 条件ステートメントの構文については、「条件付きステートメントの 構文」を参照してください。
-
キーパス
-
この値は、インストーラーがコンポーネントの検出に使用するコンポーネントに属するファイルまたはフォルダーを指します。 2 つのコンポーネントで同じキー パス値を共有することはできません。 この列の値は、 MsiGetComponentPath 関数によって返されるパスでもあります。
値が null でない場合、KeyPath は 、属性値に応じてレジストリ、 ODBCDataSource、または ファイル テーブル の主キーになります。 KeyPath が null の場合、Directory_列のフォルダーがキー パスとして使用されます。
インストーラーによって作成されたフォルダーは空になると削除されるため、 CreateFolder テーブル にエントリを作成して、空のフォルダーで構成されるコンポーネントをインストールする必要があります。
Windows インストーラー コンポーネントに、Windows Resource Protection (WRP) によって保護されているファイルまたはレジストリ キー、または Windows File Protection (WFP) によって保護されているファイルが含まれている場合、このリソースをコンポーネントの KeyPath として使用する必要があることに注意してください。 この場合、Windows インストーラーはコンポーネントをインストール、更新、または削除しません。 インストール パッケージには、保護されたリソースを含めないようにしてください。 代わりに、Windows Resource Protection でサポートされているリソース置換メカニズムを使用する必要があります。 詳細については、「Windows インストーラーとリソース保護Windows使用する」を参照してください。
解説
コンポーネントとフィーチャ間のリレーションシップの詳細については、「 フィーチャー テーブル」を参照してください。
インストーラーは、レジストリ内の共有 DLL 参照カウントとは別に、共有 DLL を追跡します。 共有 DLL の参照カウントがレジストリに存在する場合、インストーラーはファイルのインストール時に常にカウントをインクリメントし、アンインストール時にデクリメントします。 msidbComponentAttributesSharedDllRefCount が設定されておらず、参照カウントがまだ存在しない場合、インストーラーでは作成されません。 レジストリ内の SharedDLLs 参照数は、システム フォルダーにインストールされたすべてのファイルに対してインクリメントされることに注意してください。
msidbComponentAttributesSharedDllRefCount が設定されていない場合、必要な場合でも、別のアプリケーションでコンポーネントを削除できます。 これがどのように起こるかを確認するには、次のシナリオを検討してください。
- インストーラーを使用するアプリケーションは、共有コンポーネントをインストールします。
- msidbComponentAttributesSharedDllRefCount ビットが設定されておらず、参照カウントがありません。 したがって、インストーラーは参照カウントを開始しません。
- このコンポーネントを共有し、インストーラーを使用しないレガシ アプリケーションがインストールされます。
- レガシ アプリケーションは、共有コンポーネントの参照カウントを作成してインクリメントします。
- レガシ アプリケーションがアンインストールされます。
- 共有コンポーネントの参照カウントが 0 に減り、コンポーネントが削除されます。
- インストーラーを使用するアプリケーションは、コンポーネントにアクセスできなくなります。
この動作を回避するには、 msidbComponentAttributesSharedDllRefCount を設定します。
システム サービス コンポーネントは、このような使用のために特別に設計されていない限り、ソースからの実行として指定しないでください。 詳細については、 ServiceInstall テーブル を参照してください。
システム フォルダーに入るダイナミック リンク ライブラリを含むコンポーネントには、ソースからの実行を有効にする属性を設定しないでください。 その理由は、コンポーネントのインストール状態が、機能に従うか UI で設定することによって、ソースから実行するように設定された場合、DLL での LoadLibrary の後続の呼び出しが失敗するためです。
「 フィーチャー選択状態の制御」も参照してください。