2016-10-25 4 views
0

私はWIXを使ってバンドルを作成しています。私はutil:FileSearchを使用してファイルが存在するかどうかを確認していますが、そのファイルが存在する場合はMsiPackageをインストールします。私は、動作するプロセッサのアーキテクチャもチェックしています。WIX:インストール条件でファイル検索結果を使用するには?

はここBundle.wxsです:このファイルが存在する場合、MSIにのみインストールするよう

<?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> 

私はInstallConditionに何を入れますか?私は "Outlook2013Exists = true"を試しましたが、これは動作しません。

答えて

1

おそらく、ファイル検索に基づいてinstallConditionを実行すべきではありません。これから発生する可能性のあるいくつかの問題は、

  1. 正しいバージョンではありません。おそらくこの特定の製品の問題ではありませんが、他の製品の問題かもしれません。多分バージョン13.4+はあなたの製品をサポートしていますが、13.3またはそれ以上のバージョンでは動作しません。
  2. C:\ Program Filesにはインストールされていません!これは、より可能性の高いシナリオです。製品は、プログラムファイルまたはC:\ドライブにインストールする必要はありません。

installConditionの最良のオプションは、レジストリキーを確認することです。一般的にすべてのキーが同じパスHKLM \ソフトウェアになりますレジストリ\マイクロソフト\オフィス\ 15.0 \共通\ PRODUCTVERSIONともHKLM \ SOFTWARE \マイクロソフト\オフィス\ 15.0 \ Outlookは、あなたが可能性の例として、だから、

が存在することを確認また、Oそして、あなたはこの

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

IのようなInstallconditionを使用することになり

"共通\ INSTALLROOT" のインストールパスを

<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" /> 

見つけることができます私のマシンに32ビット版がインストールされているので、正しい値を表示するには、Outlook 64ビット版がインストールされているマシンのレジストリを調べなければなりません。インストール条件としてファイルの検索結果を使用したい場合は


、あなただけの

InstallCondition="ProcessorArchitecture = 9 AND Outlook2013Exists" 

IIRCを使用する必要があり、ファイル検索は、プロパティを作成し、1または0に設定しますファイルが見つかったかどうかによって異なります。条件では、1は真理として扱われ、0は偽である。

さらに、実行後にブートストラップログを確認してください。これは、プロパティ値とインストール時の条件の評価結果を表示できるので非常に便利です。

0

あなたは、このようなこの質問のように、WiXのutilのコンポーネントID検索を使用したほうが良いかもしれません。また、他のバージョンのOfficeへの参照がある

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

。また、このポスト:

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

あなたのMSI製品が何を知らずには、Officeの64ビットおよび32ビットのバージョンが存在することを最心配が必要な場合がありますので、ファイルの場所はPROGRAMFILESまたはPROGRAMFILES(x86のかもしれ)バージョンに応じて、それが最初にそこにインストールされていると仮定します。アドインをインストールする場合は、両方のBitnessバージョンのOfficeのサポートを提供する必要があります。

関連する問題