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_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 | 类型 | 源 | 目标 |
---|---|---|---|
StartMenuFolder。<GUID> | 51 | StartMenuFolder。<GUID> | [StartMenuFolder] |
MyAppDataFolderAction | 51 | AppDataFolder。<GUID> | [AppDataFolder] |
ModuleInstallExecuteSequence 表
行动 | 序列 | BaseAction | 后 | 条件 |
---|---|---|---|---|
StartMenuFolder。<GUID> | 100 |
相关主题