【问题标题】:Installshield - Merge Module - Dynamic destination directory based on user dialog inputInstallshield - 合并模块 - 基于用户对话输入的动态目标目录
【发布时间】:2019-09-02 00:49:19
【问题描述】:

我正在尝试设置覆盖合并模块的目标目录,如此处所述。我将目标目录设置为 [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 专业版,项目类型是基本 MSI 项目

【问题讨论】:

  • 您可能需要附加详细的日志文件。例如:MSIEXEC /i "example.msi" /l*v "c:\temp\yourlog.log" 等

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


【解决方案1】:

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

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

步骤如下:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 合并模块被设计为“可重定向”,否则无法更改 installshield 中的目标目录,即使是静态的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2017-03-07
    • 2011-01-11
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多