用不同的选项替换相同版本的WiX捆绑包

时间:2013-10-28 19:35:08

标签: wix windows-installer burn

我想编写一个刻录软件包,为不同的客户端预配置我的产品。为了使他们的安装尽可能简单,我想为每个安装相同软件包但具有不同注册表值的客户端创建不同的软件包。

现在我得到一个MsiPackage,可以通过MsiProperty接受输入。我有一个默认的刻录引导程序,它将此属性设置为我在命令行上传递的值为-dproperty_a=value_a的值。

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
    xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
    <Bundle Name="Product Name" 
            Version="!(bind.packageVersion.main)" 
            Manufacturer="!(bind.packageManufacturer.main)" 
            UpgradeCode="{MYGUID}">

        <WixVariable Id="property_a" Overridable="yes" Value=""/>

        <BootstrapperApplicationRef
            Id="WixStandardBootstrapperApplication.HyperlinkLicense">
            <bal:WixStandardBootstrapperApplication
                LicenseUrl="" LogoFile="bitmaps/logo.png"
                ThemeFile="burnTheme.xml"/>
        </BootstrapperApplicationRef>

        <Chain>
            <MsiPackage SourceFile="package.msi" Id="main">
                <MsiProperty Name="property_a" Value="!(wix.property_a)"/> 
            </MsiPackage>
        </Chain>
    </Bundle>
</Wix>

一切都像预期一样有效。但是,如果我安装两个不同的版本,则不会替换另一个版本。安装了两次相同的产品。

我认为使用相同的UpgradeCode可以防止这种情况发生。为什么可能安装了两个具有相同UpgradeCode的捆绑包?

我可以确保安装备用版本在安装之前卸载另一个版本吗?对于刻录包有什么类似AllowSameVersionUpgrades的内容吗?

2 个答案:

答案 0 :(得分:1)

您能否确保在第二个包中增加包版本号?这将确保它升级以前的版本并将其删除。

答案 1 :(得分:0)

您必须检查升级有什么问题,我假设您正在构建主要升级,在这种情况下,您必须保持UpgradeCode相同并更改ProductCode,产品版本和包代码,请参阅{{3}关于如何构建升级以便它取代现有产品的博客