【发布时间】:2023-03-31 00:17:01
【问题描述】:
我们的安装程序 (Windows Installer) 接受 PROPERTY=value 形式的命令行参数。该参数将根据其值(或不存在)放下 3 个文件之一。这在使用...安装时效果很好。
msiexec.exe /i filename.msi PROPERTY=value
我想执行管理安装并传递 PROPERTY=value 参数,以便在使用该参数时提取的映像镜像正常安装。我已经尝试了以下...
msiexec.exe /a filename.msi PROPERTY=value /qn TARGETDIR=C:\MSIImagePath
msiexec.exe /a filename.msi /qn TARGETDIR=C:\MSIImagePath PROPERTY=value
msiexec.exe /a "filename.msi PROPERTY=value" /qn TARGETDIR=C:\MSIImagePath
那里的第三个命令完全不起作用,前两个生成一个图像,就好像安装程序在没有指定 PROPERTY=value 参数的情况下运行一样,换句话说,就像我安装的一样......
msiexec.exe /i filename.msi
我如何执行管理安装,传递我们 MSI 期望的 PROPERTY=value 参数,并让提取的图像镜像使用该属性/值组合时应安装的文件?
编辑:这是问题背后的根本问题。
我们正在将构建过程转移到 Azure VM 并使用 Bamboo 来控制它。我们使用 InstallShield 来生成安装程序。当我们构建补丁时,我的理解是 InstallShield 必须有权访问基线安装程序映像才能知道如何创建更新 MSP。我还被告知我可以使用管理安装创建基线安装程序映像,这似乎正是我所需要的。我不是团队中的安装专家,但到目前为止,这一切对我来说都很有意义。
当我们构建初始 MSI 时,我们调用 IsCmdBld.exe 两次,每次使用 -r 参数传递不同的版本名称。第一遍生成一个分发给用户的单个 MSI。第二遍创建一个未压缩的文件夹,该文件夹看起来与您在执行管理安装时看到的完全一样。它包含一个较小的 MSI,并且安装中的所有文件都被提取到该文件夹中。 InstallShield 正是将此文件夹用作生成补丁逻辑的基线安装程序映像。
我们安装的其中一个文件可以有 4 种不同的文件内容,由 PROPERTY=value 参数指定。此文件对产品应用某些限制,旨在供管理员用于限制某些功能以增加安全性。为了实现这一点,InstallShield 项目有 4 个组件,每个组件对已安装的文件使用相同的文件名,而对源文件使用不同的文件名。我将安装的文件称为安全控制文件,将 4 个源文件称为安全限制文件。安全限制文件不是直接安装的,其中之一是根据 PROPERTY=value 选项(或不存在)作为安全控制文件安装的。
希望到目前为止的一切都有意义。由于我们有这个有点奇怪的设置,其中安全控制文件是动态的并且在安装过程中发生变化,InstallShield 必须在构建 MSI 时选择 4 个安全限制文件之一作为安全控制文件的源。调用 IsCmdBld.exe 时生成的未压缩安装程序映像使用的安全限制文件与执行管理安装时选择的文件不同。因此,在构建补丁时,我无法准确地重新创建生成补丁所需的基线安装程序映像。在我们拥有静态构建机器并且构建的开始状态是先前构建的结束状态之前,这不是问题。我们始终拥有初始安装程序基线映像,因为它是由 IsCmdBld.exe 创建的。
我可以通过执行管理安装并将所需的安全控制文件复制到基线映像中,或者通过简单地压缩所需的基线映像并使用它来解决它。我只是希望我可以将 PROPERTY=value 传递给管理安装,以便一举完美地重新创建基线。
【问题讨论】: