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

问题描述 投票:0回答:2

我正在尝试将覆盖设置为合并模块的目标目录,如此处所述。我将目标目录设置为[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 Version 2010 Professional Edition,Project Type是Basic MSI Project

windows-installer installshield msiexec merge-module installshield-2010
2个回答
0
投票

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

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


0
投票

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

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

以下是步骤:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.