MsiAssembly テーブル
MsiAssembly テーブルには、Microsoft .NET Framework アセンブリと Win32 アセンブリの Windows インストーラー設定を指定します。 詳細については、「アセンブリをグローバル アセンブリ キャッシュにインストール」と「Win32 アセンブリのインストール」を参照してください。
Windows XP 上の Windows インストーラーでは、Win32 アセンブリをサイドバイサイド アセンブリとしてインストールできます。 詳細については、「サイドバイサイド アセンブリ API」を参照してください。
Windows 2000: この機能はサポートされていません。
MsiAssembly テーブルには次の列があります。
Column | 種類 | キー | Nullable |
---|---|---|---|
Component_ | Identifier | Y | N |
Feature_ | Identifier | N | N |
File_Manifest | Identifier | N | Y |
File_Application | Identifier | N | Y |
属性 | 整数 | N | Y |
[列]
-
Component_
-
このアセンブリを含む Windows インストーラー コンポーネントを指定するコンポーネント テーブルに対するキー。
このフィールドの値を null に設定することはできません。 Component テーブルのコンポーネント KeyPath フィールドを null にすることはできません。
Win32 アセンブリの場合、コンポーネント KeyPath は File_Manifest で指定したマニフェスト ファイルにすることはできません。 マニフェストは、.NET Framework またはポリシー アセンブリのキーパスにすることができます。
-
Feature_
-
Feature テーブルのキー。
機能のインストールによってアセンブリをインストールする必要がある場合、このフィールドが示す機能は Windows インストーラーによってインストールされます。
-
File_Manifest
-
.NET Framework アセンブリまたは Win32 アセンブリのマニフェストを含むファイルを指定する File テーブルの外部キー。
Win32 アセンブリの場合、Component テーブルの KeyPath フィールドでコンポーネント キー パス ファイルとしてこのファイルを指定しないでください。
-
File_Application
-
アセンブリを非公開の場所にインストールするには、このフィールドにアセンブリ コンポーネントのキー パス ファイルを入力します。
これは Component テーブルの KeyPath フィールドに表示される値です。 インストーラーで、Directory テーブルに指定されたコンポーネントのディレクトリ構造にアセンブリをインストールできるようになります。 アセンブリをグローバル アセンブリ キャッシュにインストールする場合は、このフィールドを null にする必要があります。
-
Attributes
-
Win32 アセンブリの場合は、値 1 を入力します。 .NET Framework アセンブリの場合は、値 0 (ゼロ) を入力します。
Attributes 列が NULL の場合、インストーラーはアセンブリを .NET Framework アセンブリとして扱います。
解説
MsiAssembly テーブルに少なくとも 1 つのエントリがある場合、InstallExecuteSequence テーブルには MsiPublishAssemblies Action と MsiUnpublishAssemblies Action を含める必要があります。
アセンブリはコミット後にロールバックできないため、Windows インストーラーでは 2 段階のインストール プロセスを使います。 MsiPublishAssemblies Action によって生成されるインストール操作時に、アセンブリへのインターフェイスが作成されます。
InstallFinalize アクションが正常に実行されるまでアセンブリはコミットされません。 つまり、アセンブリに依存するカスタム アクションまたはリソースを作成する場合は、InstallFinalize アクションの後の順序にする必要があります。 たとえば、グローバル アセンブリ キャッシュ (GAC) 内のアセンブリに依存するサービスを開始する必要がある場合、そのサービスの開始を InstallFinalize アクションの後にスケジュールする必要があります。 つまり、ServiceControl テーブルを使ってサービスを開始することはできません。代わりに、InstallFinalize の後の順序にしたカスタム アクションを使う必要があります。
検証