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 Installer 属性不匹配,因此是唯一的。 然后将同名的属性设置为 Windows Installer 目录的值。 当目录解析发生时,目录具有同名的属性,因此目录的安装位置是该属性的值。 文件从不同的源位置移动到同一目标位置。 此过程应完全删除合并冲突。

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 一个
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 参考