使用 API 将合并模块合并到数据库中

合并模块提供了一种标准方法,供开发人员将共享的 Windows Installer 组件和设置逻辑传递给应用程序。 必须使用合并工具将合并模块合并到安装包中。 最佳选择是获取自由分发的合并工具,或购买独立软件供应商提供的合并工具。 例如,可以使用 Mergemod.dll 提供的功能。

按顺序使用以下步骤,通过 Mergemod.dll 的 API 将合并模块合并到 Windows Installer 安装数据库中。

将合并模块合并到 Windows Installer 安装数据库中

  1. 使用 OpenLog 打开日志文件。 仅当需要创建日志文件或为合并过程追加现有日志文件时,才需要执行此步骤。

  2. 打开安装数据库(.msi文件),它将使用 OpenDatabase 接收合并模块。 此步骤是必需的。

  3. 使用 OpenModule 打开合并模块,即要合并到数据库的 .msm 文件。 必须先打开模块,然后才能将其与安装数据库合并。 此步骤是必需的。

  4. 使用 MergeMergeEx 将模块合并到安装数据库中。 请注意,Merge 或 MergeEx 方法只能调用一次来合并特定组合的 .msi 和 .msm 文件。 MergeEx 方法仅在使用 Mergemod.dll 版本 2.0 或更高版本时可用,并且仅在使用 IMsmMerge2 接口时可用。 此步骤是必需的。

  5. 调用 get_Errors 并检查检索到的错误集合,以查找合并冲突或其他错误。 检索是非破坏性的。 可以通过重复读取调用 get_Errors 来检索错误集合的多个实例。 你需要视具体情况解决任何错误。

  6. 使用 Connect 将合并模块的组件与已经或将要合并到安装数据库中的任何其他功能相关联。 在调用此方法之前,必须已经存在该功能。 仅当具有其他功能时才需要执行此步骤,有关详细信息,请参阅将合并模块连接到多个功能

  7. 如有必要,请通过执行以下一项或多项操作,从模块中提取源文件。

    要从嵌入的 .cab 文件中提取文件,然后复制到指定目录中,请使用 ExtractFilesExtractFilesEx。 请注意,ExtractFilesEx 需要 Mergemod.dll 版本 2.0 或更高版本。

    要从嵌入的 .cab 文件中提取文件,然后保存在指定的文件中,请使用 ExtractCAB

    要从模块中提取文件,然后在合并后复制到磁盘上的源映像,请使用 CreateSourceImage。 请注意,CreateSourceImage 仅在 Mergemod.dll 版本 2.0 或更高版本中可用。

  8. 使用 CloseModule 关闭当前打开的合并模块。 此步骤是必需的。

  9. 使用 CloseDatabase 关闭当前打开的安装数据库。 此步骤是必需的。 关闭数据库会清除所有依赖项信息,但不会影响尚未检索到的任何错误。

  10. 使用 CloseLog 关闭当前日志文件。 如果打开了日志文件,则需要执行此步骤。

使用 Mergemod.dll 将模块合并到数据库中后,必须更新 Media 表以描述所需的源映像布局。 Mergemod.dll 提供的合并过程不会更新 Media 表,因为合并模块的使用者可以选择各种方式来布局源映像。