0

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

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

4

1 回答 1

1

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

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

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

  • 在构建项目之前使用某种自动化(可能是InstallShield 自动化界面中 ISWiProject 的 INSTALLDIR 属性)来更改目录结构
  • 使用 set-directory 自定义操作在运行时更改 INSTALLDIR

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

于 2017-10-25T14:04:55.597 回答