将 属性 传递给 ISCmdBld.exe

Pass property to ISCmdBld.exe

我正在使用 ISCmdBld.exe 在远程机器上构建我的安装程序,我需要指定不同的 INSTALLDIR 路径。我需要做一些类似的事情:-z INSTALLDIR="[ProgramFiles64Folder]\MyNewDir" 对于 32 位 -z INSTALLDIR="[ProgramFilesFolder]\MyNewDir"。目前,如果我尝试这样做,它不起作用,因为它会尝试只传递文字字符串,而不解析括号中的 属性。我已经试过了 with/without 引号无效。

我们可以参考目录中内置的 installshields 吗?

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

要了解您需要完成的工作,首先使用您的 32 位父文件夹构建一个 MSI,然后使用您的 64 位父文件夹构建一个 MSI,并使用 diff 工具(例如 InstallShield MSI Diff)来查看他们有何不同。 (或者实际上,您可以在 ISM 的副本上执行此操作,因为这部分在那里进行了相同的更改。)如果您不理解所看到的差异,您应该在 Directory table, the directory parent structure for the INSTALLDIR record is changed. Refer to e.g. Rob Mensching's Deciphering the Msi Directory Table 系列中看到这一点。

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

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

    更改 INSTALLDIR

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