(Cross posting:
http://stackoverflow.com/questions/16108405/wix-bundle-balcondition-utilregi
strysearch-variable-always-false)
I want my install to fail if a third party software element is not
installed. I added a `Fragment` with a `util:RegistrySearch` and a
`bal:Condition` to the `Bundle`, but I can't get it to work.
`ThirdPartyCOMLibraryInstalled` never evaluates to true. I've confirmed
that the key exists, and the value I use for `Key` is correct - I
copy/pasted the name from the selected key in regedit. There are no errors
in the log.
I'm building the installer with WiXTools 3.7 in VS2012 on Win7 64bit and
testing on both WinXP SP3 and Win7 64bit.
Searching online for other examples for `util:RegistrySearch` I ran across
the following alternative forms for the condition test expression.
1. `ThirdPartyCOMLibraryInstalled = 0` - always False
1. `ThirdPartyCOMLibraryInstalled <> 1` - always True
Here is the `Bundle` code:
<?xml version="1.0" encoding="UTF-8"?>
<Wix
xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
<Bundle Name="!(bind.packageName.MyApp)"
Version="!(bind.packageVersion.MyApp)"
Manufacturer="!(bind.packageManufacturer.MyApp)"
UpgradeCode="a07ce1d5-a7ed-4d89-a7ee-fb13a5dd69ba"
Copyright="Copyright (c) 2013 [Bundle/@Manufacturer]. All rights reserved."
IconSourceFile="$(var.My_Application1.ProjectDir)MyCo.ico">
<bal:Condition
Message="ThirdParty Application COM Library Required. Please (re)install
ThirdParty Application and ensure 'Windows API' and '.Net Components' are
installed.">ThirdPartyCOMLibraryInstalled</bal:Condition>
<Variable Name="InstallFolder"
Type="string" Value="[ProgramFilesFolder]MyCo Systems\My_Application\"/>
<BootstrapperApplicationRef
Id="WixStandardBootstrapperApplication.HyperlinkLicense" >
<bal:WixStandardBootstrapperApplication
ThemeFile="Resources\HyperlinkTheme.xml"
LaunchTarget="[InstallFolder]My_Application.exe"
LocalizationFile="Resources\HyperlinkTheme.wxl"
SuppressRepair="yes"
SuppressOptionsUI="yes"
LicenseUrl=""
LogoFile="Resources/MyCoLogoWt64.png"
/>
</BootstrapperApplicationRef>
<Chain>
<PackageGroupRef
Id="NetFx40Redist"/>
<MsiPackage Id ="MyApp"
Vital="yes" Name="My Application"
SourceFile="$(var.MyApp_Install.TargetDir)MyApp_Install.msi">
<MsiProperty
Name="INSTALLLOCATION" Value="[InstallFolder]" />
</MsiPackage>
</Chain>
</Bundle>
<Fragment>
<util:RegistrySearch
Variable="ThirdPartyCOMLibraryInstalled"
Result="exists"
Root="HKLM"
Key="SOFTWARE\Classes\ThirdPartyId.Server\CLSID"/>
</Fragment>
</Wix>
|