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.

重命名合并模块目录,以便它与 Installer 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 目录 _ 父级 DefaultDir
ProgramFilesFolder Directory1 A
StartMenuFolder Directory2 B:C
AppDataFolder Directory3 D
MyPicturesFolder Directory4 E

组件表

组件 Directory
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 参考