In meiner WiX Bootstrapper Anwendung möchte ich je nach der Outlook Bitness ein 32bit ODER ein 64bit MsiPackage installieren. Also suche ich nach dem Registrierungswert (es kann x64
oder x86
sein), lese es in eine Variable und setze die InstallCondition jedes MsiPackage auf einen Zeichenfolgenvergleich der Variablen mit dem entsprechenden Wert.Wie schreibe ich die MsiPackage/InstallCondition basierend auf einem String-Vergleich in einem Wix-Bundle?
Das Ergebnis ist unerwartet. Der String Vergleich funktioniert offensichtlich nicht.
Mein Bundle.wxs sieht wie folgt aus:
<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>
Das Installationsprogramm schreibt nun das folgende Protokoll:
[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
Darin heißt es:
- Zeichenfolge einstellen Variable 'OLBitness' zu Wert 'x64'
- Bedingung 'OLBitness = x64' ergibt false
- Variable: OLBitness = x64
Warum die Bedingung false, während der Wert scheint offensichtlich das zu erwarten?
Wie kann ich die InstallCondition schreiben, um auf Gleichheit der Zeichenketten zu prüfen?
Kann ich eine Eigenschaft verwenden und wenn ja, wie würde ich das tun?
Ich fand Beispiele für RegistrySearches mit Result = "exists" aber nicht mit Result = "value".
Danke für Hinweise!
http://stackoverflow.com/questions/6231950/using-wix-to-create-32bit-and-64bit-installers-from-one-wxs-file Könnte helfen – ChrisBint