2017-08-16 109 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或更高版本,这种方式是什么你是如何做到的。 –