2013-10-31 66 views
1

下面是两个非常基本的刻录引导程序的源代码。引导程序安装2个MSI程序包,然后SP1在appdata MSI程序包上执行主要升级。最初这个工作得很好,只是我有几个维修探头。Wix补丁包服务

  1. 当我删除父引导程序时,它足够聪明,可以删除子SP1修补程序。但是,当我从添加/删除程序中删除SP1更新时,根本没有安装任何应用程序数据。我必须对原始引导程序包执行修复以重新安装原始版本的应用程序数据。这是一个错误还是我执行它错了?

  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> 
    
+0

对不起,我张贴的XML,但它不会渲染。这是我可以拿出来分享的最好的。 –

+0

为什么不使用代码示例{}来粘贴实际的XML。 – Isaiah4110

+0

我一遍又一遍地尝试。当我粘贴XML时,它不会显示所有内容。当我把它放在引用块或代码块中时,它显得很奇怪。 –

回答

2

对于从没有原来的引导程序,你可以使用下列选项之一安装停止你的SP1:

选项1:利用捆/ @条件属性的

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

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

选项2:第二种方法利用了WIXBALExtension条件元素:

<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寻找状态和版本相关的msi软件包。然后将该版本与捆绑软件包(BasellineVersion)所需捆绑软件的最低版本进行比较。

Related Link 1 Related Link 2