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_Parent | DefaultDir |
---|---|---|
ProgramFilesFolder | Directory1 | ある |
StartMenuFolder | Directory2 | B:C |
AppDataFolder | Directory3 | D |
MyPicturesFolder | Directory4 | E |
コンポーネント | ディレクトリ |
---|---|
Component1。<GUID> | ProgramFilesFolder |
Component2。<GUID> | StartMenuFolder |
Component3。<GUID> | AppDataFolder |
Component4。<GUID> | MyPicturesFolder |
CustomAction テーブル の
CustomAction | 種類 | 源 | ターゲット |
---|---|---|---|
StartMenuFolder。<GUID> | 51 | StartMenuFolder。<GUID> | [StartMenuFolder] |
MyAppDataFolderAction | 51 | AppDataFolder。<GUID> | [AppDataFolder] |
ModuleInstallExecuteSequence テーブル
アクション | 順序 | BaseAction | 後 | 条件 |
---|---|---|---|---|
StartMenuFolder。<GUID> | 100 |
関連トピック
-
マージ モジュール ICE リファレンス の