WiX バンドルを構築しています。実行可能パッケージ (実際にはASCOM Platform 6 SP1) をチェーンする必要があります。検出条件は、特定のレジストリ キーが存在し、特定の最低限必要なバージョンよりも大きいバージョン番号が含まれていることです。これらの条件が満たされていない場合は、前提条件が満たされていないため、EXE ファイル パッケージをダウンロードしてインストールする必要があります。
私が作成したフラグメントは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<?include $(sys.CURRENTDIR)\Config.wxi?>
<!-- Define a prerequisite for ASCOM Platform 6 SP1 -->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Fragment>
<util:RegistrySearch Id="FindAscom6Installed"
Variable="AscomPlatform6Installed"
Root="HKLM"
Key="SOFTWARE\ASCOM\Platform"
Value="Platform Build"
Result="exists"
Win64="$(var.Win64)"
/>
<util:RegistrySearch Id="FindAscom6Build"
Variable="AscomPlatformBuild"
Root="HKLM"
Key="SOFTWARE\ASCOM\Platform"
Value="Platform Build"
Result="value"
Win64="$(var.Win64)"
/>
<PackageGroup Id="AscomPlatform6Sp1">
<!-- If necessary, install ASCOM Platform version 6, do not uninstall
it during driver uninstall. -->
<!-- DetectCondition="AscomPlatformInstalled AND AscomPlatformBuild >= 6.0.10028.2207" -->
<ExePackage
SourceFile="ASCOMPlatform6SP1.exe"
DetectCondition="AscomPlatform6Installed AND AscomPlatformBuild >= 6.0.10028.2207"
DownloadUrl="http://download.ascom-standards.org/ASCOMPlatform6SP1.exe"
PerMachine="yes"
Permanent="yes"
Vital="yes" />
</PackageGroup>
</Fragment>
</Wix>
これは正常にコンパイルされますが、セットアップを実行すると失敗します。ログ出力は次のとおりです。
[0E54:141C][2012-12-12T06:37:38]i001: Burn v3.7.1204.0, Windows v6.2 (Build 9200: Service Pack 0), path: C:\Users\Tim\Documents\visual studio 2012\Projects\Wix.BurnTutorial\Wix.BurnTutorial\bin\Debug\Wix.BurnTutorial.exe, cmdline: ''
[0E54:141C][2012-12-12T06:37:38]i000: Setting string variable 'WixBundleLog' to value 'C:\Users\Tim\AppData\Local\Temp\Wix.BurnTutorial_20121212063738.log'
[0E54:141C][2012-12-12T06:37:38]i000: Setting string variable 'WixBundleOriginalSource' to value 'C:\Users\Tim\Documents\visual studio 2012\Projects\Wix.BurnTutorial\Wix.BurnTutorial\bin\Debug\Wix.BurnTutorial.exe'
[0E54:141C][2012-12-12T06:37:38]i000: Setting string variable 'WixBundleName' to value 'Wix.BurnTutorial'
[0E54:141C][2012-12-12T06:37:39]i100: Detect begin, 2 packages
[0E54:141C][2012-12-12T06:37:39]i000: Registry key not found. Key = 'SOFTWARE\ASCOM\Platform'
[0E54:141C][2012-12-12T06:37:39]i000: Registry key not found. Key = 'SOFTWARE\ASCOM\Platform'
[0E54:141C][2012-12-12T06:37:39]i000: Setting numeric variable 'AscomPlatform6Installed' to value 0
[0E54:141C][2012-12-12T06:37:39]e000: Error 0x8007000d: Failed to parse condition "AscomPlatform6Installed AND AscomPlatformBuild >= 6.0.10028.2207". Unexpected character at position 51.
[0E54:141C][2012-12-12T06:37:39]e000: Error 0x8007000d: Failed to read next symbol.
[0E54:141C][2012-12-12T06:37:39]e000: Error 0x8007000d: Failed to parse value.
[0E54:141C][2012-12-12T06:37:39]e000: Error 0x8007000d: Failed to parse term.
[0E54:141C][2012-12-12T06:37:39]e000: Error 0x8007000d: Failed to parse boolean-factor.
[0E54:141C][2012-12-12T06:37:39]e000: Error 0x8007000d: Failed to parse boolean-term.
[0E54:141C][2012-12-12T06:37:39]e000: Error 0x8007000d: Failed to parse boolean-term.
[0E54:141C][2012-12-12T06:37:39]e000: Error 0x8007000d: Failed to parse expression.
[0E54:141C][2012-12-12T06:37:39]e051: Error 0. Failed to parse condition AscomPlatform6Installed AND AscomPlatformBuild >= 6.0.10028.2207. Unexpected symbol at position (null)
[0E54:141C][2012-12-12T06:37:39]e000: Error 0x8007000d: Failed to evaluate executable package detect condition.
[0E54:141C][2012-12-12T06:37:39]e151: Detect failed for package: ASCOMPlatform6SP1.exe, error: 0x8007000d
[0E54:141C][2012-12-12T06:37:39]i101: Detected package: ASCOMPlatform6SP1.exe, state: Unknown, cached: None
[0E54:141C][2012-12-12T06:37:39]i101: Detected package: TargetPackage, state: Absent, cached: None
[0E54:141C][2012-12-12T06:37:39]i199: Detect complete, result: 0x8007000d
問題は、キーが存在しないため、AscomPlatform6Buildが null であり、WiX が気に入らないことにあると思われます。
この検出条件を正しく構築するにはどうすればよいですか?