英語で読む

次の方法で共有


ICEM09

ICEM09 は、事前定義されているディレクトリがマージ モジュールで安全に処理されることを確認します。 これは、モジュール内のコンポーネントが、"ProgramFilesFolder" や "StartMenuFolder" などの事前定義されているシステム ディレクトリにディレクトリをインストールしないことを確認することによって行われます。 代わりに、モジュールは、(マージ モジュールの名前付け規則を使用して作成された) 一意の名前を持つディレクトリを使用し、適切なターゲット ディレクトリをターゲットにするカスタム アクションを使用する必要があります。 この方法により、モジュールが最終的なデータベース内の既存のディレクトリ構造と競合することを防止できます。 ICEM09 は、この手法を機能させるために必要なカスタム アクションが存在しないこと (その場合はマージ ツールでカスタム アクションを生成できます)、または正しい形式で存在すること (その場合は予期されたとおりにカスタム アクションが機能します) をチェックします。

ICEM09 によって報告された警告またはエラーを修正できないと、マージ モジュールのクライアントに問題が発生する可能性があります。 データベースには、多くの場合、ProgramFilesFolder などの主キーを持つディレクトリ テーブル行が存在します。そのため、モジュール内のコンポーネントが、ProgramFilesFolder などの事前定義されているディレクトリに直接インストールされると、モジュール内のディレクトリ エントリが既存の行と競合する可能性があります。 この条件があるため、モジュールのユーザーは、既存のソース ディレクトリと一致させるために、モジュールからのソース ファイルを分割する必要があります。

結果

ICEM09 は、モジュール コンポーネントが、事前定義されているシステム ディレクトリにディレクトリをインストールすると、既存のディレクトリ構造と名前が競合する可能性が発生するため、エラーまたは警告を報告します。

ICEM09 では、示されているデータベース エントリを含むモジュールに対して次の警告が返されます。

Warning: The component 'Component1.<GUID>' installs directly into the pre-defined 
directory 'ProgramFilesFolder'. It is recommended that merge modules alias 
all such directories to unique names.

マージ モジュール ディレクトリの名前を変更して、それが Windows インストーラー プロパティと一致せずに一意になるようにします。 次に、同じ名前のプロパティを Windows インストーラー ディレクトリの値に設定します。 ディレクトリ解決が行われると、ディレクトリには同じ名前のプロパティがあるため、ディレクトリのインストール場所はプロパティの値になります。 ファイルは、個別のソースの場所から同じターゲットの場所に移動します。 このプロセスでは、マージの競合が完全に解消されます。

Warning: The 'ModuleInstallExecuteSequence' table contains a type 51 action 
(StartMenuFolder.<GUID>) for a pre-defined directory, but this action 
does not have sequence number '1'

アクションにシーケンス番号 1 が設定されていない場合は、シーケンス内の早い段階でアクションがターゲット データベースにマージされないため、効果的に機能しない可能性があります。

この警告を修正するには、シーケンス番号を 1 に設定します。 (一部の古いバージョンとは異なり) 最新のマージ ツールでは、マージ時にこれらのカスタム アクションが生成されるため、マージ モジュールにアクションを明示的に作成する必要が常にあるとは限らないことに注意してください。

Warning: The 'CustomAction' table contains a type 51 action (MyAppDataFolderAction) 
for a pre-defined directory, but the name is not the same as the target directory. 
Many merge tools will generate duplicate actions."

CustomAction 列は CustomAction テーブルの主キーであるため、一部のマージ ツールでは、事前に作成されたアクション名が異なるために重複するアクションが生成される可能性があります。

この警告を修正するには、アクションにターゲット ディレクトリと同じ名前を付けます。 (一部の古いバージョンとは異なり) 最新のマージ ツールでは、マージ時にこれらのカスタム アクションが生成されるため、マージ モジュールにアクションを明示的に作成する必要が常にあるとは限らないことに注意してください。

Directory テーブル

ディレクトリ Directory_Parent DefaultDir
ProgramFilesFolder Directory1 A
StartMenuFolder Directory2 B:C
AppDataFolder Directory3 D
MyPicturesFolder Directory4 E

 

Component テーブル

コンポーネント ディレクトリ
Component1.<GUID> ProgramFilesFolder
Component2.<GUID> StartMenuFolder
Component3.<GUID> AppDataFolder
Component4.<GUID> MyPicturesFolder

 

CustomAction テーブル

CustomAction Type source 移行先
StartMenuFolder.<GUID> 51 StartMenuFolder.<GUID> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.<GUID> [AppDataFolder]

 

ModuleInstallExecuteSequence テーブル

アクション シーケンス BaseAction クリック後 条件
StartMenuFolder.<GUID> 100

 

マージ モジュール ICE リファレンス