WIX Bundle bal:condition - util:RegistrySearch变量始终为true

时间:2013-06-18 07:53:57

标签: wix wix3.6

如果已经安装了以前版本的应用程序,我希望我的安装失败。

我正在尝试在RegEdit文件中搜索UpgradeCode。升级代码的值名称是“BundleUpgradeCode”。但是,即使regedit中没有条目,Bootstrap的日志也会将条件值返回true。我不确定会出现什么问题。

                              

    <util:RegistrySearchRef Id="SearchForInstaller" />

    <util:RegistrySearch Id="VSTORuntimeTest" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\" Value="VSTORFeature_CLR40" Variable="VSTORFeature"/>
    <util:RegistrySearch Id="VSTORuntimeVersionV4R" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\" Value="Version" Variable="VSTORVersionV4R"/>
    <util:RegistrySearch Id="VSTORuntimeVersionV4" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\" Value="Version" Variable="VSTORVersionV4"/>

    <util:RegistrySearch Id="DotNetTest" Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Client" Value="Install" Variable="DotNetInstall"/>
    <util:RegistrySearch Id="DotNetVersion" Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Client" Value="Version" Variable="DotNetVersion"/>

    <Chain>
        <ExePackage Id="dotNetFx40_Client_x86_x64" SourceFile="$(var.PreReqPath)\DotNetFX40Client\dotNetFx40_Client_x86_x64.exe" PerMachine="yes" Cache="no"
                    Compressed="no"
                    DownloadUrl="http://download.microsoft.com/download/7/B/6/7B629E05-399A-4A92-B5BC-484C74B5124B/dotNetFx40_Client_setup.exe"
                    Permanent="yes"
                    InstallCommand="/q /norestart"
                    DetectCondition="NOT DotNetInstall"
                    InstallCondition="NOT DotNetInstall OR NOT (DotNetVersion >=v4.0.30319)" />

        <ExePackage Id="VSTORuntime" SourceFile="$(var.PreReqPath)\VSTOR40\vstor_redist.exe" Permanent="yes" Vital="yes" Cache="no" Compressed="no"
                    DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=158917"
                    PerMachine="yes"
                    InstallCommand="/q /norestart"
                    DetectCondition="VSTORFeature"
                    InstallCondition="NOT VSTORFeature OR NOT (VSTORVersionV4R >=v10.0.40303) OR NOT (VSTORVersionV4 >=v10.0.21022)" />

        <MsiPackage SourceFile="$(var.AEMSetup.TargetPath)" Vital="yes" Compressed="no" Id="WordAddIns" DisplayInternalUI="yes"/>
    </Chain>
</Bundle>
<Fragment>
    <util:RegistrySearch Id="SearchForInstaller"  Variable ="BundleUpgradeCode" Root="HKLM" Key="SOFTWARE\Wow6432Node\Microsoft\Windows" Result="exists"  />

    <bal:Condition Message="Another version of this product is already installed. Installation of version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs in Control Panel." >BundleUpgradeCode</bal:Condition>

</Fragment>
  

[0E98:0390] [2013-06-18T13:22:49] i000:设置字符串变量   'WixBundleName'重视'Avanade估算模型 - v3.4.3'   [0E98:0390] [2013-06-18T13:22:49] i100:检测开始,3个包   [0E98:0390] [2013-06-18T13:22:49] i000:设置字符串变量   'DotNetInstall'值为'1'[0E98:0390] [2013-06-18T13:22:49] i000:   将字符串变量'DotNetVersion'设置为值'4.5.50709'   [0E98:0390] [2013-06-18T13:22:49] i000:设置数值变量   'BundleUpgradeCode'到值1 [0E98:0390] [2013-06-18T13:22:49] i000:   将字符串变量'VSTORFeature'设置为值'1'   [0E98:0390] [2013-06-18T13:22:49] i000:设置字符串变量   'VSTORVersionV4'值为'10 .0.40303'   [0E98:0390] [2013-06-18T13:22:49] i000:设置字符串变量   'VSTORVersionV4R'价值'10 .0.40303'   [0E98:0390] [2013-06-18T13:22:49] i102:检测到的相关捆绑:   {4edb6855-8f5b-438b-9a6b-4598e7083cd7},输入:升级,范围:   PerMachine,版本:3.4.2.0,操作:MajorUpgrade   [0E98:0390] [2013-06-18T13:22:49] i052:条件'不是DotNetInstall'   评估为假。 [0E98:0390] [2013-06-18T13:22:49] i052:条件   'VSTORFeature'评估为真。   [0E98:0390] [2013-06-18T13:22:49] i101:检测到的包裹:   dotNetFx40_Client_x86_x64,state:Absent,cached:None   [0E98:0390] [2013-06-18T13:22:49] i101:检测到包:VSTORuntime,   state:Present,cached:无[0E98:0390] [2013-06-18T13:22:49] i101:   检测到的包:WordAddIns,状态:存在,缓存:完成   [0E98:0390] [2013-06-18T13:22:49] i052:条件'BundleUpgradeCode'   评估为真。 [0E98:0390] [2013-06-18T13:22:49] i199:检测   完成,结果:0x0

任何帮助将不胜感激。在此先感谢。

2 个答案:

答案 0 :(得分:1)

如果注册表项可用,

BundleUpgradeCode变量将从 RegistrySearch 返回1。据我所知,如果注册表项可用,我们可以考虑安装以前的版本。在这种情况下,您需要设置

(BundleUpgradeCode=0) or Not (BundleUpgradeCode=1)

评估条件错误。这样安装程序将失败并显示Condition消息。

<bal:Condition Message="Another version of this product is already installed. Installation of version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs in Control Panel." >Not (BundleUpgradeCode=1)</bal:Condition>

我怀疑您的注册表搜索条件不正确。为什么使用Wow6432Node,因为 RegistrySearch 具有属性“Win64”

答案 1 :(得分:0)

尝试搜索SOFTWARE \ Microsoft \ Windows而不是SOFTWARE \ Wow6432Node \ Microsoft \ Windows。在这种情况下你不需要给WOW6432Node