2013-10-31 93 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