我们的安装程序(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使用此文件夹作为基线安装程序映像,从中生成补丁逻辑。
我们安装的其中一个文件可以包含由PROPERTY = value参数指定的4种不同的文件内容。此文件对产品应用某些限制,管理员可以使用这些限制来限制某些功能以增加安全性。要解决这个问题,InstallShield项目有4个组件,每个组件对安装的文件使用相同的文件名,对源文件使用不同的文件名。我将安装文件称为安全控制文件,将4个源文件称为安全限制文件。安全限制文件未直接安装,其中一个安装基于PROPERTY = value选项(或其缺席)作为安全控制文件安装。
希望到目前为止所有事情都有意义。由于我们有一些奇怪的设置,其中安全控制文件是动态的并且在安装期间发生变化,InstallShield必须选择4个安全限制文件中的一个,以在构建MSI时用作安全控制文件的源。调用IsCmdBld.exe时生成的未压缩安装程序映像使用的安全限制文件不同,而不是执行管理安装时选择的安全限制文件。因此,在构建补丁时,我无法准确地重新创建生成补丁所需的基线安装程序映像。在我们拥有静态构建机器并且构建的开始状态是先前构建的结束状态之前,这不是问题。我们始终将初始安装程序基准映像放在原位,因为它是由IsCmdBld.exe创建的。
我可以通过执行管理安装并将所需的安全控制文件复制到基线图像中,或者通过简单地压缩所需的基线图像并使用它来解决它。我只是希望我可以将PROPERTY =值传递给管理安装,以便一举完美地重建基线。
答案 0 :(得分:2)
我认为你不能这样做。管理安装实际上并不像实际安装那样安装。根据MSI文件中的静态值布置文件。管理安装的主要用途之一是使用修补程序,您可以在其中修补管理员安装,或使用两个管理安装映像来生成修补程序。如果文件位置不像MSI中那样定义,则补丁生成将失败,因为它不知道文件的位置。
如果您解释了您尝试解决的问题以及为什么该位置需要像实际安装一样(它不是),这可能会很有用。你在做什么需要布局的管理员形象?
答案 1 :(得分:0)
如果希望在以后的安装阶段(而不仅仅是在管理安装期间)遵守属性设置,则可能需要修改生成的.msi文件的Property表。或者创建一个转换来设置属性并在安装时应用它:
msiexec.exe /i admin.msi TRANSFORMS=sets_a_property.mst /qn
这类似于广告,根据属性的预期用途,您可能需要确保在按需安装期间应用它而不仅仅是广告。在这种情况下,您可以在广告期间使用/t
:
msiexec /j filename.msi /t sets_a_property.mst /qn
请注意,在原始示例中,targetdir=...
是可疑的,因为该属性很可能是TARGETDIR
。具有小写字母的属性被视为私有,并且可能无法遵守在外部设置它们的尝试。