Wix Patch Bundle服务

时间:2013-10-31 14:09:51

标签: wix burn wix3.8

以下是两个非常基本的刻录引导程序的源代码。 Bootstrapper安装2个MSI软件包,然后SP1在appdata MSI软件包上执行重大升级。最初这很有效,除了我有几个服务探针。

  1. 当我删除父引导程序时,它足够智能删除子SP1修补程序。但是,当我从添加/删除程序中删除SP1更新时,根本没有安装任何appdata。我必须对原始的Bootstrapper软件包执行修复,才能重新安装原始版本的appdata。这是一个错误还是我错误地实现了它?

  2. 我可以自己安装SP1软件包。如果尚未安装Bootstrapper,如何防止安装SP1?

  3. 如果我创建一个Bootstrapper 2.0,它会正确取代Bootstrapper 1.0和SP1。如果我运行Bootstrapper 1.0它会正确阻止。但如果我运行SP1,它会安装。如何仅将SP1约束到Bootsrapper v1?

  4. 如果当前无法使用前两项,是否可以创建不可移除的SP1? (强制删除并重新安装父包以恢复到原始状态。)我看到如何使用DisableRemove和DisableModify属性,但它根本没有显示在添加/删除程序中,用户仍然可以返回EXE并使用WiXStdBA删除捆绑包。

    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
        <Bundle Manufacturer="ISWIX" Name="Bootstrapper" UpgradeCode="44a1059e-e7f7-46c7-9627-b720d6417d69" Version="1.0.0.0">
            <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"/>
            <Chain>
                <MsiPackage SourceFile="app-1.0.msi"/>
                <MsiPackage SourceFile="appdata-1.0.msi"/>
            </Chain>
        </Bundle>
    </Wix>
    
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
        <Bundle Manufacturer="ISWIX" Name="SP1" ParentName="Bootstrapper" UpgradeCode="44a1059e-e7f7-46c7-9627-b720d6417d69" Version="1.0.0.1">
            <RelatedBundle Action="Patch" Id="44a1059e-e7f7-46c7-9627-b720d6417d69"/>
            <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"/>
            <Chain>
                <MsiPackage SourceFile="appdata-1.1.msi"/>
            </Chain>
        </Bundle>
    </Wix>
    

1 个答案:

答案 0 :(得分:2)

要在没有原始引导程序的情况下停止安装SP1,您可以使用以下选项之一:

选项1:使用bundle / @ Condition属性

<Bundle
    Name="Test123" Version="1.0.0.0"
    Manufacturer="abc cORP" UpgradeCode=""
    Condition="((VersionNT = v6.0)">
</Bundle>

这仅适用于预构建的wix刻录变量。可以在此处找到详细的变量列表:LINK

选项2:第二种方法使用WIXBALExtension Condition元素:

<bal:Condition
   Message="The Bootstrapper has to be installed in version $(var.BaselineVersion)">  
      WixBundleInstalled OR      
      ((SampleMsiInstalledState = 5) AND (SampleMsiInstalledVersion &gt;= v$(var.BaselineVersion)))
</bal:Condition>
<util:ProductSearch Guid="[msi_prerequisite_package_product_code]"
    Result="version" Variable="SampleMsiInstalledVersion" />
<util:ProductSearch Guid="[msi_prerequisite_package_product_code]"
    Result="state" Variable="SampleMsiInstalledState" />

这里我们使用WixUtilExtension中的ProductSearch来查找相关msi包的状态和版本。然后将版本与捆绑包所需的捆绑包的最低版本(BasellineVersion)进行比较。

Related Link 1 Related Link 2