2016-10-25 1 views
0

Ich erstelle ein Bündel mit WIX. Ich verwende ein util: FileSearch, um zu prüfen, ob eine Datei existiert und ich möchte ein MsiPackage installieren, wenn diese Datei existiert. Ich überprüfe auch die Prozessorarchitektur, die funktioniert.WIX: Wie wird das Dateisuche-Ergebnis im Installationszustand verwendet?

Hier ist die Bundle.wxs:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
    <Bundle Name="My_Setup_2" Version="1.0.0.0" Manufacturer="ABC" UpgradeCode="3945a604-d6ae-4334-8a5b-1e9e2f222e08"> 
     <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" /> 
     <Chain> 
      <PackageGroupRef Id="MyInstallx64"/> 
     </Chain> 
    </Bundle> 
    <Fragment> 
    <util:FileSearch Id="Outlook2013Search" 
        Variable="Outlook2013Exists" 
        Result="exists" 
        Path="[ProgramFilesFolder]Microsoft Office\Office15\OUTLOOK.EXE"/> 

    <PackageGroup Id="MyInstallx64"> 
     <MsiPackage 
     SourceFile="MyInstallx64.msi" 
     InstallCondition="ProcessorArchitecture = 9 AND Outlook2013Exists = true" Visible="yes" > 
     </MsiPackage> 
    </PackageGroup> 
    </Fragment> 
</Wix> 

Was ich in der InstallCondition gelegt, so dass die msi installiert nur, wenn diese Datei vorhanden ist? Ich habe versucht "Outlook2013Exists = true", aber das funktioniert nicht.

Antwort

1

Sie sollten wahrscheinlich keine installCondition basierend auf einer Dateisuche durchführen. Ein paar Probleme, die sich daraus ergeben können,

  1. Nicht die richtige Version. Vielleicht kein Problem für dieses spezielle Produkt, aber könnte für andere sein. Vielleicht unterstützt Version 13.4+ Ihr Produkt, aber es funktioniert nicht mit 13.3 oder älter.
  2. Nicht in C: \ Programme installiert! Dies ist das wahrscheinlichere Szenario. Das Produkt muss nicht in Programmdateien oder auf dem Laufwerk C: \ installiert werden.

Die beste Option für eine installCondition ist die Überprüfung eines Registrierungsschlüssels. Im Allgemeinen befinden sich alle Registrierungsschlüssel im selben Pfad HKLM \ SOFTWARE \ Microsoft \ Office \ 15.0 \ Common \ ProductVersion und überprüfen Sie auch, dass HKLM \ SOFTWARE \ Microsoft \ Office \ 15.0 \ Outlook vorhanden ist

So als ein Beispiel könnten Sie do

<util:RegistrySearch 
    Id="Office15Installed_x64" 
    Win64="yes" 
    Root="HKLM" 
    Key="SOFTWARE\Microsoft\Office\15.0\Common" 
    Value="ProductVersion" 
    Result="value" 
    Variable="Office15Installed_x64" /> 
<util:RegistrySearch 
    Id="Outlook15Bitness_x64" 
    Win64="yes" 
    Root="HKLM" 
    Key="SOFTWARE\Microsoft\Office\15.0\Outlook" 
    Value="Bitness" 
    Result="value" 
    Variable="Outlook15Bitness_x64" /> 

Sie können auch den Pfad installieren finden in "Common \ InstallRoot"

Dann würden Sie einen Installcondition wie diese

InstallCondition="Office15Installed_x64 AND Outlook15Bitness_x64 ~= &quot;x64&quot;" 

verwende ich o Ich habe jetzt 32-Bit auf meinem Computer installiert, so dass Sie die Registrierung eines Computers mit installiertem Outlook 64-Bit durchsehen müssen, um die richtigen Werte zu sehen.


Wenn Sie die Datei Suchergebnis als Installations Bedingung verwenden möchten, müssen Sie nur

InstallCondition="ProcessorArchitecture = 9 AND Outlook2013Exists" 

IIRC verwenden, erstellt die Datei suchen eine Eigenschaft und setzt es auf 1 oder 0 abhängig davon, ob die Datei gefunden wurde oder nicht. In einer Bedingung wird 1 als truthy und 0 als false behandelt.

Schauen Sie sich auch nach dem Start das Bootstrapper-Protokoll an. Dies ist sehr nützlich, da es Ihnen Eigenschaftswerte und das Bewertungsergebnis der Bedingungen in der Installation anzeigen kann.

0

Sie könnten besser sein, eine Komponente id Suche util WiX verwenden, wie in dieser Frage:

What Component IDs should I search for to detect whether the Office 2010 PIA's are Installed

, wo es auch Verweise auf andere Office-Versionen sind.Auch in diesem Beitrag:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/bdcd8850-0b6a-4fd1-a0cb-647ff12c3088/finding-the-component-id-for-office-2013?forum=vsto

Ohne zu wissen, was Ihr MSI Produkt der Fall ist, können Sie oben Sorgen müssen, dass es 64- und 32-Bit-Versionen von Office, so dass die Speicherorte können Programfiles oder Programfiles (x86) abhängig von der Version und der Annahme, dass sie dort installiert ist. Wenn Sie ein Add-In installieren, müssen Sie möglicherweise Unterstützung für beide Bitness-Versionen von Office bereitstellen.

Verwandte Themen