将参数从bootstrapper传递到msi bundle包

一箫一剑平生意,负尽狂名十五年。这篇文章主要讲述将参数从bootstrapper传递到msi bundle包相关的知识,希望能为你提供帮助。
我正在使用VS2010和WiX 3.6来创建MSI包并将它们捆绑到Bootstrapper设置中。这是我的Boostrapper代码。

< ?xml version="1.0" encoding="UTF-8"?> < Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> < Bundle Name="" Version="" Manufacturer="" UpgradeCode=""> < BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" /> < Chain> < MsiPackage SourceFile="Package1.msi"> < MsiProperty Name="PARAM1" Value="https://www.songbingjia.com/android/[PARAM1]" /> < MsiProperty Name="PARAM2" Value="https://www.songbingjia.com/android/[PARAM2]" /> < /MsiPackage> < MsiPackage SourceFile="Package2.msi"> < MsiProperty Name="PARAM1" Value="https://www.songbingjia.com/android/[PARAM1]" /> < MsiProperty Name="PARAM2" Value="https://www.songbingjia.com/android/[PARAM2]" /> < /MsiPackage> < /Chain> < /Bundle> < /Wix>

MSI包必须具有指定的参数才能运行。通常情况下,我会打电话给"Packag21.msi PARAM1=1 PARAM2=2"。在我构建项目之后,我尝试以与Bootstrapper.exe PARAM1=1 PARAM2=2相同的方式将参数传递给我的Bootstrapper.exe,但它似乎没有将它们传递给MSI。安装与缺少的参数条件挂起。
有没有办法将参数从exe传递给msi?
答案目前标准的bootstrapper中没有这个:WixStdBa doesn't make the commandline properties available - ID: 3489809
如果您创建自己的引导程序应用程序,则可以实现此类功能。
编辑:虽然您无法通过命令行将参数传递给引导程序,但仍可以通过各种方式在引导程序中收集信息:
例:设置变量
< Variable Name="PARAM1" Value="https://www.songbingjia.com/android/SomeValue" Persisted="yes" Type="string" />

例如:搜索注册表
< util:RegistrySearch Root="HKLM" Key="SoftwareSomeProduct" Value="https://www.songbingjia.com/android/SomeKey" Variable="PARAM1" Result="value"/>

另一答案这已经实现,并且可以在5月21日的Wix 3.6 RC版本中使用。
以下是它如何工作的一般概念:
< Wix> < Bundle> < Variable Name="CommandLineArg" bal:Overridable="yes"/> < Chain> < MsiPackage> < MsiProperty Name="CommandLineArg" Value="https://www.songbingjia.com/android/[CommandLineArg]"/> < /MsiPackage> < /Chain> < /Bundle> < /Wix>

【将参数从bootstrapper传递到msi bundle包】您必须在命令行中创建一个可覆盖的bundle变量,然后将该变量传递给msi。

    推荐阅读