次の方法で共有


コンポーネント テーブル

コンポーネント テーブルにはコンポーネントが一覧表示され、次の列があります。

コラム 種類 許容
コンポーネント 識別子の Y N
ComponentId GUID N Y
ディレクトリ_ 識別子の N N
属性 整数 N N
条件 条件の N Y
KeyPath 識別子の N Y

コンポーネント

コンポーネント レコードを識別します。

主テーブル キー。

ComponentId

このコンポーネント、バージョン、言語に固有の文字列 GUID。

これらの GUID の文字は大文字である必要があることに注意してください。 GUIDGEN などのユーティリティでは、小文字を含む GUID を生成できます。 これらの有効なコンポーネント コード GUID を作成するには、小文字を大文字に変更する必要があります。

この列が null の場合、インストーラーはコンポーネントを登録せず、インストーラーによってコンポーネントを削除または修復することはできません。 これは、一時ファイルをクリーンアップするカスタム アクションや古い製品を削除するカスタム アクションなど、インストール中にのみコンポーネントが必要な場合に意図的に行われる可能性があります。 また、登録する必要のないユーザーのコンピューターにデータ ファイルをコピーする場合にも便利です。

Directory_

ディレクトリ テーブル内のエントリの外部キー。 これは、AppSearch アクション またはディレクトリ テーブルから取得した既定の設定で設定できる、実際のパスを含む値を持つプロパティ名です。

開発者は、ユーザー プロファイル フォルダーのいずれかにファイルを配置するコンポーネントの作成を避ける必要があります。 これらのファイルは、マルチユーザーの状況ではすべてのユーザーが使用できるわけではないので、修復が必要なコンポーネントをインストーラーが永続的に表示する可能性があります。

ディレクトリ テーブルの列 1 の外部キー。

属性

この列には、リモート実行のオプションを指定するビット フラグが含まれています。 指定されたビットを列の合計値に追加して、オプションを含めます。

手記

Web の場所からダウンロードされる .msi ファイルの場合、コンポーネントをソースから実行できるように属性フラグを設定しないでください。 これは Windows インストーラーの制限であり、INSTALLSTATE_BADCONFIGの機能状態を返すことができます。

ビット フラグ
msidbComponentAttributesLocalOnly
0
0x0000
コンポーネントをソースから実行することはできません。 機能がネットワークから実行されたり、ソースから実行されたりしないように、機能に属するすべてのコンポーネントに対してこのビットを設定します。 機能にコンポーネントがない場合、この機能では常に、ソースからの実行とコンピューターからの実行が有効なオプションとして表示されることに注意してください。
msidbComponentAttributesSourceOnly
1
0x0001
コンポーネントはソースからのみ実行できます。 機能が my コンピューターから実行されないように、機能に属するすべてのコンポーネントに対してこのビットを設定します。 機能にコンポーネントがない場合、この機能では常に、ソースからの実行とコンピューターからの実行が有効なオプションとして表示されることに注意してください。
msidbComponentAttributesOptional
2
0x0002
コンポーネントは、ローカルまたはソースから実行できます。
msidbComponentAttributesRegistryKeyPath
4
0x0004
このビットが設定されている場合、KeyPath 列の値は、レジストリ テーブルのキーとして使用されます。 レジストリ テーブル内の対応するレコードの Value フィールドが null の場合、そのレコードの Name フィールドに "+"、"-"、または "*" を含めてはなりません。 詳細については、レジストリ テーブル の名前フィールドの説明参照してください。
HKCU ハイブに書き込まれるレジストリ エントリには、このビットを設定することをお勧めします。 これにより、同じコンピューターに複数のユーザーがいる場合に、インストーラーによって必要な HKCU レジストリ エントリが書き込まれます。
msidbComponentAttributesSharedDllRefCount
8
0x0008
このビットが設定されている場合、インストーラーはコンポーネントのキー ファイルの共有 DLL レジストリの参照カウントをインクリメントします。 このビットが設定されていない場合、インストーラーは参照カウントが既に存在する場合にのみ参照カウントをインクリメントします。
msidbComponentAttributesPermanent する
16
0x0010
このビットが設定されている場合、インストーラーはアンインストール中にコンポーネントを削除しません。 インストーラーは、Windows インストーラー レジストリ設定でコンポーネントの追加のシステム クライアントを登録します。
msidbComponentAttributesODBCDataSource
32
0x0020
このビットが設定されている場合、KeyPath 列の値は、ODBCDataSource テーブルのキーになります。
msidbComponentAttributesTransitive
64
0x0040
このビットが設定されている場合、インストーラーは再インストール時に Condition 列のステートメントの値を再評価します。 値が以前に False で True に変更された場合、インストーラーによってコンポーネントがインストールされます。 値が以前 True で False に変更されている場合、コンポーネントにクライアントとして他の製品がある場合でも、インストーラーによってコンポーネントが削除されます。
このビットは、推移的なコンポーネントにのみ設定する必要があります。 推移的コンポーネント の使用に関するを参照してください。
msidbComponentAttributesNeverOverwrite
128
0x0080
このビットが設定されている場合、コンポーネントのキー パス ファイルまたはキー パス レジストリ エントリが既に存在する場合、インストーラーはコンポーネントをインストールまたは再インストールしません。 アプリケーションは、コンポーネントのクライアントとして自身を登録します。
このフラグは、レジストリ テーブルによって登録されているコンポーネントにのみ使用します。 このフラグは、AppIdクラスExtensionProgIdMIME、および Verb テーブルで登録されたコンポーネントには使用しないでください。
msidbComponentAttributes64bit する
256
0x0100
これを 64 ビット コンポーネントとしてマークするには、このビットを設定します。 この属性により、32 ビットコンポーネントと 64 ビット コンポーネントの両方を含むパッケージのインストールが容易になります。 このビットが設定されていない場合、コンポーネントは 32 ビット コンポーネントとして登録されます。
32 ビット コンポーネントを置き換える 64 ビット コンポーネントの場合は、このビットを設定し、ComponentId 列に新しい GUID を割り当てます。
msidbComponentAttributesDisableRegistryReflection
512
0x0200
このビットを設定すると、このコンポーネントの影響を受ける既存のレジストリ キーと新しいレジストリ キーの レジストリ リフレクション が無効になります。 このビットが設定されている場合、Windows インストーラーは、コンポーネントからアクセスされる各キーに対して RegDisableReflectionKey を呼び出します。 このビットは、Windows インストーラー バージョン 4.0 で使用できます。 このビットは、32 ビット システムでは無視されます。 このビットは、Windows XP の 64 ビット バージョンでは無視されます。
注: 64 ビット Windows エミュレーター (WOW64) で実行されている 32 ビット Windows アプリケーション、64 ビット アプリケーションとは異なるレジストリ ビューを参照します。 レジストリ リフレクションは、これら 2 つのレジストリ ビューの間にいくつかのレジストリ値をコピーします。
msidbComponentAttributesUninstallOnSupersedence
1024
0x0400
コンピューターに孤立したコンポーネントが残らないように、パッチ パッケージ内のコンポーネントにこのビットを設定します。 後続のパッチがインストールされ、MsiPatchSequence テーブルの msidbPatchSequenceSupersedeE 以前の 値でマークされ、最初のパッチよりも優先される場合、Windows インストーラー 4.5 以降では、msidbComponentAttributesUninstallOnSupersedence 値でマークされたコンポーネントの登録を解除およびアンインストールできます。 コンポーネントがこのビットでマークされていない場合、スーパーシングパッチをインストールすると、コンピュータ上の未使用のコンポーネントが残ることがあります。
MSIUNINSTALLSUPERSEDEDCOMPONENTS プロパティの設定は、すべてのコンポーネントに対してこのビットを設定する場合と同じ効果があります。
Windows インストーラー 4.0 以前の:msidbComponentAttributesUninstallOnSupersedence の値はサポートされておらず、無視されます。

msidbComponentAttributesShared
2048
0x0800
システムにインストールされている少なくとも 1 つのパッケージでコンポーネントがこの属性値でマークされている場合、インストーラーはコンポーネントをすべてのパッケージでマーク済みとして扱います。 マークされたコンポーネントを共有するパッケージがアンインストールされた場合、Windows インストーラー 4.5 は、アンインストール対象のパッケージによって最上位バージョンがインストールされている場合でも、システム上のコンポーネントの最高バージョンを共有し続けることができます。
DisableSharedComponent ポリシーが 1 に設定されている場合、このビットで有効になっている共有コンポーネント機能はパッケージで取得されません。
Windows インストーラー 4.0 以前の:msidbComponentAttributesShared の値はサポートされておらず、無視されます。

条件

この列には、コンポーネントをインストールするかどうかを制御できる条件付きステートメントが含まれています。 条件が null または true と評価された場合、コンポーネントは有効になります。 条件が False に評価された場合、コンポーネントは無効になり、インストールされません。

[条件] フィールドは、CostFinalize アクション中にのみコンポーネントを有効または無効にします。 CostFinalize 後にコンポーネントを有効または無効にするには、カスタム アクションまたは DoAction ControlEvent を使用して、MsiSetComponentState呼び出す必要があります。

[属性] 列の推移的ビットがコンポーネントに対して設定されていない限り、後で製品のメンテナンス インストールで [条件] 列の条件ステートメントが False と評価された場合でも、コンポーネントはインストール後も有効のままであることに注意してください。

コンポーネント テーブルの [条件] 列には、インストールされている機能とコンポーネントの状態への参照を含む条件式が含まれます。 条件付きステートメントの構文については、「条件付きステートメントの構文 」を参照してください。

KeyPath

この値は、インストーラーがコンポーネントを検出するために使用するコンポーネントに属するファイルまたはフォルダーを指します。 2 つのコンポーネントが同じキー パス値を共有することはできません。 この列の値は、MsiGetComponentPath 関数によって返されるパスでもあります。

値が null でない場合、KeyPath は、レジストリの主キー、ODBCDataSource 、または属性値に応じて ファイル テーブルのいずれかになります。 KeyPath が null の場合、Directory_列のフォルダーがキー パスとして使用されます。

インストーラーによって作成されたフォルダーは空になると削除されるため、空のフォルダーで構成されるコンポーネントをインストールするには、CreateFolder テーブル にエントリを作成する必要があります。

Windows インストーラー コンポーネントに、Windows Resource Protection (WRP) によって保護されているファイルまたはレジストリ キー、または Windows ファイル保護 (WFP) によって保護されているファイルが含まれている場合は、このリソースをコンポーネントの KeyPath として使用する必要があります。 この場合、Windows インストーラーはコンポーネントのインストール、更新、または削除を行いません。 保護されたリソースをインストール パッケージに含めないようにしてください。 代わりに、Windows リソース保護 、サポートされている リソース置換メカニズムを使用する必要があります。 詳細については、「Windows インストーラーと Windows Resource Protectionの使用」を参照してください。

備考

コンポーネントとフィーチャ間のリレーションシップの詳細については、「フィーチャ テーブル 参照してください。

インストーラーは、レジストリ内の共有 DLL 参照カウントとは別に共有 DLL を追跡します。 共有 DLL の参照カウントがレジストリに存在する場合、インストーラーは常にファイルのインストール時にカウントをインクリメントし、アンインストール時にデクリメントします。 msidbComponentAttributesSharedDllRefCount 設定されておらず、参照カウントがまだ存在しない場合、インストーラーは作成しません。 システム フォルダーにインストールされているファイルについては、レジストリの SharedDL 参照数がインクリメントされることに注意してください。

msidbComponentAttributesSharedDllRefCount が設定されていない場合、別のアプリケーションが必要な場合でもコンポーネントを削除できます。 これがどのように起こるかを確認するには、次のシナリオを検討してください。

  • インストーラーを使用するアプリケーションは、共有コンポーネントをインストールします。
  • msidbComponentAttributesSharedDllRefCount ビットが設定されておらず、参照カウントがありません。 したがって、インストーラーは参照カウントを開始しません。
  • このコンポーネントを共有し、インストーラーを使用しないレガシ アプリケーションがインストールされます。
  • レガシ アプリケーションは、共有コンポーネントの参照カウントを作成してインクリメントします。
  • レガシ アプリケーションがアンインストールされます。
  • 共有コンポーネントの参照カウントが 0 にデクリメントされ、コンポーネントが削除されます。
  • インストーラーを使用するアプリケーションは、コンポーネントにアクセスできなくなりました。

この動作を回避するには、msidbComponentAttributesSharedDllRefCount 設定します。

システム サービス コンポーネントは、このような使用のために特別に設計されていない限り、ソースからの実行として指定しないでください。 詳細については、ServiceInstall テーブル を参照してください。

システム フォルダーに入るダイナミック リンク ライブラリを含むコンポーネントに対して、ソースからの実行インストールを有効にする属性を設定しないでください。 その理由は、コンポーネントのインストール状態が、機能に従うか UI で設定することによって、ソースから実行するように設定された場合、DLL で LoadLibrary 後続の呼び出しが失敗するためです。

「フィーチャ選択状態の制御」も参照してください。

検証

ICE02
ICE03
ICE06
ICE07
ICE08
ICE09
ICE18
ICE19
ICE21
ICE30
ICE32
ICE35
ICE38
ICE41
ICE42
ICE43
ICE46
ICE50
ICE54
ICE57
ICE59
ICE62
ICE67
ICE76
ICE79
ICE80
ICE83
ICE86
ICE88
ICE91
ICE92
ICE97