2016-10-25 9 views
0

Я создаю пакет, используя WIX. Я использую утилиту: FileSearch, чтобы проверить, существует ли файл, и я хочу установить MsiPackage, если этот файл существует. Я также проверяю архитектуру процессора, которая работает.WIX: Как использовать результат поиска файла в состоянии установки?

Вот в 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> 

Что я положил в InstallCondition так, что MSI устанавливает только если этот файл существует? Я попробовал «Outlook2013Exists = true», но это не работает.

ответ

1

Возможно, вы не должны делать установку, основанную на поиске файлов. Несколько вопросов, которые могут возникнуть из-за этого,

  1. Не правильная версия. Возможно, это не проблема для данного продукта, но может быть для других. Возможно, версия 13.4+ поддерживает ваш продукт, но он не работает с 13,3 и старше.
  2. Не установлен в C: \ Program Files! Это более вероятный сценарий. Продукт не нужно устанавливать в программные файлы или даже на диск C: \.

Лучшим вариантом для установки является проверка раздела реестра. Как правило, все ключи реестра будут находиться в одном пути HKLM \ SOFTWARE \ Microsoft \ Office \ 15.0 \ Common \ ProductVersion, а также проверять наличие HKLM \ SOFTWARE \ Microsoft \ Office \ 15.0 \ Outlook

Так, например, у

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

вы также можете найти путь установки в "Common \ InstallRoot"

Тогда вы будете использовать Installcondition как этот

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

I о теперь у меня на 32-битном компьютере установлена ​​32-разрядная версия, поэтому вам нужно будет просмотреть реестр машины с установленным 64-битным Microsoft Outlook, чтобы увидеть правильные значения для использования.


Если вы хотите использовать результат поиска файлов, как установить условие, вы просто должны использовать

InstallCondition="ProcessorArchitecture = 9 AND Outlook2013Exists" 

IIRC, поиск файлов создает свойство и устанавливает его в 1 или 0 в зависимости от того, найден ли файл. В условии 1 считается правдоподобным, а 0 - ложным.

Кроме того, загляните в журнал загрузки после запуска. Это очень полезно, поскольку оно может отображать значения свойств и результат оценки условий установки.

0

Вы могли бы быть лучше использовать WIX UTIL компонент поиска ID, например, в этом вопросе:

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

, где есть ссылки на другие версии Office, также.Кроме того, этот пост:

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

Не зная, что делает ваш продукт MSI, возможно, потребуется Наивысшая беспокойство, что есть 64- и 32-разрядные версии Office, поэтому расположение файлов может быть ProgramFiles или ProgramFiles (x86) в зависимости от версии и при условии, что она установлена ​​там в первую очередь. Если вы устанавливаете надстройку, вам может потребоваться поддержка обеих версий Bitness Office.