2017-08-16 126 views
0

我使用bootstraper安裝VC++和.NET Framework,如何檢查引導程序(wix)中版本檢查的condtiotion?

<?xml version="1.0" encoding="UTF-8"?> 
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
<Bundle Name="Engage" Version="1.0.0.0" Manufacturer="my Corporation" UpgradeCode="d7d559b1-3388-4275-91e2-d8d44d2f02db"> 
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" /> 
<Chain> 
    <!-- TODO: Define the list of chained packages. --> 
    <PackageGroupRef Id="Netfx45FullPackage" /> 
    </Chain> 
</Bundle> 
<Fragment> 
<PackageGroup Id="Netfx45FullPackage"> 
    <ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" SourceFile=".\NDP452-x86-x64ENU.exe" /> 
    <ExePackage Id="VC2013" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" SourceFile=".\vcredist_x862013.exe" /> 

    <MsiPackage Id="MyProg" Cache="no" Compressed="no" DisplayInternalUI="yes" Vital="yes" SourceFile="D:\Projects\Crimson\engage.client\EngageSetupCreator\bin\Debug\EngageSetupCreator.msi" /> 
    </PackageGroup> 
    </Fragment> 
</Wix> 

目前的IAM安裝這兩個不檢查任何條件,我應該怎樣做檢查,如果同一版本的vC++和.netframework存在,如果存在跳過安裝?

如果已經存在,則不需要再次安裝。

回答

1

您需要添加檢測條件並使用註冊表搜索來獲取安裝的版本。

例如:

<?define NetFx451MinRelease = 378675 ?> 

<util:RegistrySearchRef Id="NETFRAMEWORK45"/> 

<ExePackage Id="NetFx451" 
       ... 
       DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx451MinRelease)" 
       ... 
       > 
</ExePackage> 

同爲VC++。

+0

你能不能準確解釋> = $(var.NetFx451MinRelease)」 指示? –

+0

378675這是什麼指示? –

+0

這是版本號。如果你的條件是.NET版本4.5.1或更高版本,這種方式是什麼你是如何做到的。 –