Installshield - 合并模块 - 基于用户对话输入的动态目标目录

Installshield - Merge Module - Dynamic destination directory based on user dialog input

我正在尝试按照此处所述设置覆盖合并模块的目标目录。我将目标目录设置为 [BIN]。 BIN 为 public 属性。在编译时 [BIN] 的值是 C:\Program Files (x86)\CompanyName\ProductName.

根据自定义对话框中的用户输入,此 属性 更新为 C:\Program Files (x86)\CompanyName\UserInputName\ProductName。

合并模块中的所有 DLL 文件都被复制到 [BIN] 的编译时值 - C:\Program Files (x86)\CompanyName\ProductName。由于某种原因,在这种情况下动态值被忽略。

谁能告诉我哪里出了问题?

我使用的是Install Shield Version 2010 Professional Edition,项目类型是Basic MSI Project

合并模块add a GUID to every primary key 以防止合并冲突。所以 BIN 标识符在合并模块中使用时实际上变成了 BIN.G_U_I_D

要解决此问题,合并模块 designed to be "retargetable"

我在 InstallShield 论坛上发布了同样的问题,结论是 InstallShield 不支持在 运行 期间更改 MSM 文件的目标目录。

建议的解决方法是使用自定义操作 'Set Directory'。

步骤如下:

  1. 在 Redistributable 视图中,右键单击 MSM 文件 -> 属性 -> 目标 -> 设置为 [MSM_DEST_STATIC_DIR]。
  2. 创建类型为 'Set Directory' 的自定义操作,目录名称为 - MSM_DEST_STATIC_DIR,目录值 - [MSD_DEST_DIR_DYNAMIC_VALUE]
  3. 从对话框中获取用户输入后,首先更新 MSD_DEST_DIR_DYNAMIC_VALUE,然后执行在步骤 2 中创建的自定义操作。

在执行此操作时,我还意识到无法根据动态用户输入更新 IISROOTFOLDER。我按照与自定义操作相同的过程来更新 IISROOTFOLDER。