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

时间:2019-04-11 11:35:16

标签: windows-installer installshield msiexec merge-module installshield-2010

我试图按此处所述设置覆盖合并模块的目标目录。我将目标目录设置为[BIN]。 BIN是公共财产。在编译时,[BIN]的值为C:\ Program Files(x86)\ CompanyName \ ProductName。

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

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

有人可以告诉我怎么回事吗?

我正在使用Install Shield版本2010专业版,项目类型为Basic MSI Project

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

建议的解决方法是使用自定义操作“设置目录”。

以下是步骤:

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

这样做的同时,我也意识到不可能基于动态用户输入来更新IISROOTFOLDER。我按照相同的步骤进行了自定义操作,以更新IISROOTFOLDER。