Chcę, aby moja instalacja zakończyła się niepowodzeniem, jeśli element oprogramowania innej firmy nie jest zainstalowany. Dodałem Fragment
z util:RegistrySearch
i bal:Condition
do Bundle
, ale nie mogę go uruchomić. ThirdPartyCOMLibraryInstalled
nigdy nie jest prawdziwe. Potwierdziłem, że klucz istnieje, a wartość, której używam dla Key
jest poprawna - kopiuję/wkleja nazwę z wybranego klucza w regedit. W dzienniku nie ma żadnych błędów.Pakiet WiX bal: condition - util: Zmienna rejestruSearch zawsze fałszywa
Buduję instalator za pomocą WiXTools 3.7 w Visual Studio 2012 na Windows 7 64-bitowych i testowych na obu Windows XP SP3 i Windows 7 64-bitowych.
Wyszukiwanie w Internecie dla innych przykładów dla util:RegistrySearch
Przeszukałem następujące alternatywne formularze dla wyrażenia testowego warunku.
ThirdPartyCOMLibraryInstalled = 0
- zawsze FałszThirdPartyCOMLibraryInstalled <> 1
- zawsze prawdziwe
Oto kod Bundle
:
<?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>
To działa dokładnie. Dziękuję Ci. Byłbym szczęśliwy, gdyby opublikowano to w dokumentacji WiX jako jeden z "Przewodników", tj. "Zablokuj instalację bootstrapera w oparciu o brakujący klucz rejestru" Co mogę zrobić, aby tak się stało? –
Brzmi nieźle. Aby dodać pomoc, wyślij żądanie ściągnięcia do gałęzi wix38, zmieniając pliki w: 'src \ chm \ html'. Kod znajduje się pod adresem http://wix.codeplex.com/ –
Patrz żądanie pobierania na codeplex. –