Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix补丁包服务_Wix_Burn_Wix3.8 - Fatal编程技术网

Wix补丁包服务

Wix补丁包服务,wix,burn,wix3.8,Wix,Burn,Wix3.8,下面是两个非常基本的burn引导程序的源代码。引导程序安装2个MSI包,然后SP1对appdata MSI包执行主要升级。最初,这工作得很好,除了我有几个维修问题 当我删除父引导程序时,它足够聪明,可以删除子SP1补丁。但是,当我从添加/删除程序中删除SP1更新时,根本没有安装任何appdata。我必须对原始引导程序包执行修复,才能重新安装原始版本的appdata。这是一个bug还是我实现错了 我能够自行安装SP1捆绑包。如果尚未安装引导程序,如何防止安装SP1 如果我创建了Bootstrapp

下面是两个非常基本的burn引导程序的源代码。引导程序安装2个MSI包,然后SP1对appdata MSI包执行主要升级。最初,这工作得很好,除了我有几个维修问题

  • 当我删除父引导程序时,它足够聪明,可以删除子SP1补丁。但是,当我从添加/删除程序中删除SP1更新时,根本没有安装任何appdata。我必须对原始引导程序包执行修复,才能重新安装原始版本的appdata。这是一个bug还是我实现错了

  • 我能够自行安装SP1捆绑包。如果尚未安装引导程序,如何防止安装SP1

  • 如果我创建了Bootstrapper2.0,它将正确地取代Bootstrapper1.0和SP1。如果我运行Bootstrapper1.0,它将正确阻止。但如果我运行SP1,它就会安装。如何仅将SP1约束到BootsApper v1

  • 如果前两项当前不可用,是否可以创建不可移动的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>
    
    
    

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

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

    <Bundle
        Name="Test123" Version="1.0.0.0"
        Manufacturer="abc cORP" UpgradeCode=""
        Condition="((VersionNT = v6.0)">
    </Bundle>
    
    
    
    这只适用于预构建的wix burn变量。变量的详细列表可在此处找到:

    选项2:第二种方法使用条件元素:

    <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" />
    
    
    WixBundleInstalled或
    ((SampleMsiInstalledState=5)和(SampleMsiInstalledVersion=v$(var.BaselineVersion)))
    
    这里我们使用WixUtilExtension中的ProductSearch来查找相关msi包的状态和版本。然后将该版本与捆绑包所需的捆绑包的最低版本(BasellineVersion)进行比较


    抱歉,我发布了XML,但它不会呈现。这是我能想到的最好的分享方式。为什么不使用代码示例{}来粘贴实际的XML呢?我试了很多次。当我只粘贴XML时,它不会显示所有内容。当我把它放在引号块或代码块中时,它显得很奇怪。检查这个问题,@ChristopherPaint:关于格式,请看-在你的例子中,我会选择添加注释,因为代码块在语义上不属于列表的一部分。