私のWiX Bootstrapperアプリケーションでは、Outlook Bitnessに応じて32ビットまたは64ビットのMsiPackageをインストールしたいと考えています。そこで、レジストリ値(x64
またはx86
)を検索し、変数に読み込み、各MsiPackageのInstallConditionを、変数と適切な値の文字列比較に設定します。Wixバンドル内の文字列比較に基づいてMsiPackage/InstallConditionを書き込む方法は?
結果は予想外です。文字列比較は明らかに機能しません。
マイBundle.wxsは次のようになります。
<Wix ...>
<Bundle ... >
<util:RegistrySearchRef Id="VSTORuntimeTest" />
<util:RegistrySearchRef Id="VSTORuntimeVersionV4R" />
<util:RegistrySearchRef Id="VSTORuntimeVersionV4" />
<util:RegistrySearchRef Id="Outlook14Installed"/>
<util:RegistrySearchRef Id="Outlook15Installed"/>
<util:RegistrySearchRef Id="Outlook16Installed"/>
<util:RegistrySearchRef Id="Outlook14Bitness"/>
<util:RegistrySearchRef Id="Outlook15Bitness"/>
<util:RegistrySearchRef Id="Outlook16Bitness"/>
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication ... />
</BootstrapperApplicationRef>
<Variable Name="InstallSubFolder"
Type="string"
Value="$(var.CompanyFolderName)\$(var.ProductFolderName)" />
<Chain>
<PackageGroupRef Id="NetFx40Web"/>
<ExePackage Id="VSTORuntime" SourceFile="$(var.SolutionDir)\WiX\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
Id="OLAddin64bit"
Vital="yes"
Name="$(var.ProductName) 64 bit"
SourceFile="$(var.Setup_64bit_WiX.TargetPath)"
InstallCondition="OLBitness = x64">
<MsiProperty Name="INSTALLLOCATION" Value="[ProgramFiles64Folder][InstallSubFolder]"/>
</MsiPackage>
<MsiPackage
Id="OLAddin32bit"
Vital="yes"
Name="$(var.ProductName) 32 bit"
SourceFile="$(var.Setup_32bit_WiX.TargetPath)"
InstallCondition="NOT (OLBitness = x64)">
<MsiProperty Name="INSTALLLOCATION" Value="[ProgramFilesFolder][InstallSubFolder]"/>
</MsiPackage>
</Chain>
</Bundle>
<Fragment>
<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\v4\" Value="Version" Variable="VSTORVersionV4"/>
<util:RegistrySearch Id="Outlook14Installed" Root="HKLM" Key="SOFTWARE\Microsoft\Office\14.0\Outlook\InstallRoot\" Variable="Outlook14Installed" Result="exists" Win64="yes"/>
<util:RegistrySearch Id="Outlook15Installed" After="Outlook14Installed" Root="HKLM" Key="SOFTWARE\Microsoft\Office\15.0\Outlook\InstallRoot\" Variable="Outlook15Installed" Result="exists" Win64="yes" />
<util:RegistrySearch Id="Outlook16Installed" After="Outlook15Installed" Root="HKLM" Key="SOFTWARE\Microsoft\Office\16.0\Outlook\InstallRoot\" Variable="Outlook16Installed" Result="exists" Win64="yes" />
<util:RegistrySearch Id="Outlook14Bitness" Condition="Outlook14Installed" Variable="OLBitness" After="Outlook16Installed" Root="HKLM" Key="SOFTWARE\Microsoft\Office\15.0\Outlook\" Value="Bitness" Win64="yes" />
<util:RegistrySearch Id="Outlook15Bitness" Condition="Outlook15Installed" Variable="OLBitness" After="Outlook16Installed" Root="HKLM" Key="SOFTWARE\Microsoft\Office\15.0\Outlook\" Value="Bitness" Win64="yes" />
<util:RegistrySearch Id="Outlook16Bitness" Condition="Outlook16Installed" Variable="OLBitness" After="Outlook16Installed" Root="HKLM" Key="SOFTWARE\Microsoft\Office\16.0\Outlook\" Value="Bitness" Win64="yes" />
<bal:Condition
Message="Outlook 2010 or newer required.">
Outlook14Installed Or Outlook15Installed or Outlook16Installed
</bal:Condition>
</Fragment>
</Wix>
インストーラは今、次のログを書き込みます。
[5FBC:FE84][2016-04-22T16:30:05]i001: Burn v3.10.1.2213, Windows v6.3 (Build 9600: Service Pack 0), path: Setup.exe
[5FBC:FE84][2016-04-22T16:30:05]i000: Initializing string variable 'InstallSubFolder' to value 'foo'
[5FBC:FE84][2016-04-22T16:30:05]i009: Command Line: ''
...
[5FBC:FE84][2016-04-22T16:30:05]i100: Detect begin, 4 packages
[5FBC:FE84][2016-04-22T16:30:05]i000: Setting string variable 'NETFRAMEWORK40' to value '1'
[5FBC:FE84][2016-04-22T16:30:05]i000: Registry key not found. Key = 'SOFTWARE\Microsoft\Office\14.0\Outlook\InstallRoot\'
[5FBC:FE84][2016-04-22T16:30:05]i000: Setting numeric variable 'Outlook14Installed' to value 0
[5FBC:FE84][2016-04-22T16:30:05]i000: Registry key not found. Key = 'SOFTWARE\Microsoft\Office\15.0\Outlook\InstallRoot\'
[5FBC:FE84][2016-04-22T16:30:05]i000: Setting numeric variable 'Outlook15Installed' to value 0
[5FBC:FE84][2016-04-22T16:30:05]i000: Setting numeric variable 'Outlook16Installed' to value 1
[5FBC:FE84][2016-04-22T16:30:05]i052: Condition 'Outlook14Installed' evaluates to false.
[5FBC:FE84][2016-04-22T16:30:05]i052: Condition 'Outlook15Installed' evaluates to false.
[5FBC:FE84][2016-04-22T16:30:05]i052: Condition 'Outlook16Installed' evaluates to true.
[5FBC:FE84][2016-04-22T16:30:05]i000: Setting string variable 'OLBitness' to value 'x64'
[5FBC:FE84][2016-04-22T16:30:05]i000: Setting string variable 'VSTORFeature' to value '1'
[5FBC:FE84][2016-04-22T16:30:05]i000: Setting string variable 'VSTORVersionV4' to value '10.0.60301'
[5FBC:FE84][2016-04-22T16:30:05]i000: Setting string variable 'VSTORVersionV4R' to value '10.0.50903'
[5FBC:FE84][2016-04-22T16:30:05]i052: Condition 'NETFRAMEWORK40' evaluates to true.
[5FBC:FE84][2016-04-22T16:30:05]i052: Condition 'VSTORFeature' evaluates to true.
[5FBC:FE84][2016-04-22T16:30:05]i101: Detected package: NetFx40Web, state: Present, cached: None
[5FBC:FE84][2016-04-22T16:30:05]i101: Detected package: VSTORuntime, state: Present, cached: None
[5FBC:FE84][2016-04-22T16:30:05]i101: Detected package: Addin64bit, state: Absent, cached: None
[5FBC:FE84][2016-04-22T16:30:05]i101: Detected package: Addin32bit, state: Absent, cached: None
[5FBC:FE84][2016-04-22T16:30:05]i052: Condition 'Outlook14Installed Or Outlook15Installed or Outlook16Installed' evaluates to true.
[5FBC:FE84][2016-04-22T16:30:05]i199: Detect complete, result: 0x0
[5FBC:10EE4][2016-04-22T16:30:07]i000: Setting numeric variable 'EulaAcceptCheckbox' to value 1
[5FBC:FE84][2016-04-22T16:30:07]i200: Plan begin, 4 packages, action: Install
[5FBC:FE84][2016-04-22T16:30:07]w321: Skipping dependency registration on package with no dependency providers: NetFx40Web
[5FBC:FE84][2016-04-22T16:30:07]i052: Condition 'NOT VSTORFeature OR NOT (VSTORVersionV4R >=v10.0.40303) OR NOT (VSTORVersionV4 >=v10.0.21022)' evaluates to false.
[5FBC:FE84][2016-04-22T16:30:07]w321: Skipping dependency registration on package with no dependency providers: VSTORuntime
[5FBC:FE84][2016-04-22T16:30:07]i052: Condition 'OLBitness=x64' evaluates to false.
[5FBC:FE84][2016-04-22T16:30:07]i052: Condition 'NOT (OLBitness=x64)' evaluates to true.
[5FBC:FE84][2016-04-22T16:30:07]i000: Setting string variable 'WixBundleRollbackLog_Addin32bit' to value 'foo.log'
[5FBC:FE84][2016-04-22T16:30:07]i000: Setting string variable 'WixBundleLog_OLPlannerAddin32bit' to value 'foo.log'
[5FBC:FE84][2016-04-22T16:30:07]i201: Planned package: NetFx40Web, state: Present, default requested: Present, ba requested: Present, execute: None, rollback: None, cache: No, uncache: No, dependency: None
[5FBC:FE84][2016-04-22T16:30:07]i201: Planned package: VSTORuntime, state: Present, default requested: Absent, ba requested: Absent, execute: None, rollback: None, cache: No, uncache: No, dependency: None
[5FBC:FE84][2016-04-22T16:30:07]i201: Planned package: Addin64bit, state: Absent, default requested: Absent, ba requested: Absent, execute: None, rollback: None, cache: No, uncache: No, dependency: None
[5FBC:FE84][2016-04-22T16:30:07]i201: Planned package: Addin32bit, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, cache: Yes, uncache: No, dependency: Register
[5FBC:FE84][2016-04-22T16:30:07]i299: Plan complete, result: 0x0
[5FBC:FE84][2016-04-22T16:30:07]i300: Apply begin
[5FBC:FE84][2016-04-22T16:30:07]i010: Launching elevated engine process.
...
[5FBC:FE84][2016-04-22T16:30:15]i399: Apply complete, result: 0x80070642, restart: None, ba requested restart: No
[5FBC:FE84][2016-04-22T16:30:16]i500: Shutting down, exit code: 0x642
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: EulaAcceptCheckbox = 1
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: InstallSubFolder = foo
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: NETFRAMEWORK40 = 1
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: OLBitness = x64
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: Outlook14Installed = 0
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: Outlook15Installed = 0
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: Outlook16Installed = 1
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: VSTORFeature = 1
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: VSTORVersionV4 = 10.0.60301
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: VSTORVersionV4R = 10.0.50903
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: WixBundleAction = 5
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: WixBundleElevated = 0
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: WixBundleFileVersion = 1.0.0.0
[5FBC:FE84][2016-04-22T16:30:16]i410: Variable: WixBundleInstalled = 0
...
[5FBC:FE84][2016-04-22T16:30:16]i007: Exit code: 0x642, restarting: No
それは述べている:文字列変数を設定
- 'をOLBitness' に値 'x64'
- 条件 'OLBitness = x64'はfalseに評価されます
- 変数:値は明らかに期待しているように見える一方でOLBitness = x64の
なぜfalseに条件を評価しますか?
文字列の等価性をテストするためにInstallConditionを書くにはどうすればよいですか?
プロパティを使用することはできますか?その場合はどうすればいいですか?
Result = "exists"ではなく、Result = "value"でRegistrySearchesの例が見つかりました。
ありがとうございました!
http://stackoverflow.com/questions/6231950/using-wix-to-create-32bit-and-64bit-installers-from-one-wxs-file助けてくれるかもしれない – ChrisBint