【问题标题】:Pass property to ISCmdBld.exe将属性传递给 ISCmdBld.exe
【发布时间】:2017-10-24 19:29:23
【问题描述】:

我正在使用 ISCmdBld.exe 在远程机器上构建我的安装程序,我需要指定不同的 INSTALLDIR 路径。我需要执行以下操作:-z INSTALLDIR="[ProgramFiles64Folder]\MyNewDir" 和 32 位 -z INSTALLDIR="[ProgramFilesFolder]\MyNewDir"。目前,如果我尝试这个它不起作用,因为它会尝试只传递文字字符串而不解析括号中的属性。我试过带/不带引号都无济于事。

我们可以引用目录中的 installshields 吗?

【问题讨论】:

    标签: installshield installshield-2014


    【解决方案1】:

    你不能用这种方式解决它。如您所见,将 -z INSTALLDIR="[ParentFolder]Subdir" 传递给 ISCmdBld 会导致 INSTALLDIR 具有该字面值。为什么这不起作用?简而言之,因为这不是 Windows Installer 的工作方式。

    要了解您需要完成什么,首先使用您的 32 位父文件夹构建一个 MSI,然后使用您的 64 位父文件夹构建一个 MSI,并使用差异工具(例如 InstallShield MSI Diff)查看它们是如何实现的不同。 (或者实际上,您可以在 ISM 的副本上执行此操作,因为这部分在那里进行了相同的更改。)您应该看到在 Directory table 中,INSTALLDIR 记录的目录父结构已更改。请参阅例如Rob Mensching's Deciphering the Msi Directory Table 系列,如果您不了解您所看到的差异。

    不幸的是,没有简单的命令行方法可以在构建时进行此更改。所以你有两个主要选择:

    • 在构建项目之前使用某种自动化(可能是ISWiProject's INSTALLDIR property in the InstallShield automation interface)来更改目录结构
    • 使用 set-directory 自定义操作在运行时更改 INSTALLDIR

      注意:两个这样的自定义操作可以在运行时在两个替代位置之间进行选择,方法是在其条件中引用您在其他地方设置的内容(例如通过 ISCmdBld 设置的属性)。

    【讨论】:

    • 对我来说,我认为自动化接口是最简单的,所以我选择了那个选项。谢谢@Michael
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多