Как проверить наличие установленного пакета в WiX 3.0? - PullRequest
5 голосов
/ 12 мая 2009

Я хочу убедиться, что Crystal Reports Basic для Visual Studio 2008 установлен как условие для моего собственного установочного пакета.

Я нашел это в описании загрузчика для этого продукта (C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages \ CrystalReports10_5 \ product.xml):

<InstallChecks>
  <MsiProductCheck Property="CRVSInstalled" Product="{AA467959-A1D6-4F45-90CD-11DC57733F32}"/>
  <MsiProductCheck Property="CRVSRunTimex86Installed" Product="{CE26F10F-C80F-4377-908B-1B7882AE2CE3}"/>
  <MsiProductCheck Property="CRVSRunTimex64Installed" Product="{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}. "/>
</InstallChecks>

Пытаясь имитировать это поведение в WiX, я сделал следующее:

<Property Id="CRVSINSTALLED">
  <ComponentSearch Id="CRVSInstalledSearch" Guid="{AA467959-A1D6-4F45-90CD-11DC57733F32}" />
</Property>
<Property Id="CRVSRUNTIMEX86INSTALLED">
  <ComponentSearch Id="CRVSRunTimex86InstalledSearch" Guid="{CE26F10F-C80F-4377-908B-1B7882AE2CE3}" />
</Property>
<Property Id="CRVSRUNTIMEX64INSTALLED">
  <ComponentSearch Id="CRVSRunTimex64InstalledSearch" Guid="{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}" />
</Property>
<Condition Message="!(loc.CrystalReportsRequired)">Installed OR CRVSINSTALLED OR CRVSRUNTIMEX86INSTALLED OR CRVSRUNTIMEX64INSTALLED</Condition>

Но, похоже, ComponentSearch ищет компоненты пакета (файлы, каталоги), которые имеют свои собственные идентификаторы, а не ищет сам пакет.

Так как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 13 мая 2009

Как предложено здесь :

Попробуйте выполнить поиск по реестру в HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{productcode}. Также рассмотрите поиск в HKCU, если ваш продукт и зависимость являются продуктами для каждого пользователя.

Это выглядит так:

<Property Id="CRVSINSTALLED">
  <RegistrySearch Id="CRVSInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{AA467959-A1D6-4F45-90CD-11DC57733F32}" Name="InstallDate" Type="raw" />
</Property>
<Property Id="CRVSRUNTIMEINSTALLED">
  <RegistrySearch Id="CRVSRunTimeInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{CE26F10F-C80F-4377-908B-1B7882AE2CE3}" Name="InstallDate" Type="raw" />
</Property>
<Property Id="CRVSRUNTIMEINSTALLED">
  <RegistrySearch Id="CRVSRunTimeInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}" Name="InstallDate" Type="raw" />
</Property>
2 голосов
/ 29 октября 2013

Вы можете использовать Таблица обновлений

<Upgrade Id="36E76465-5548-390F-955A-2776582C6A6C">
  <UpgradeVersion OnlyDetect="yes" Property="TFSCLIENT" Minimum="11.0.50727" />
</Upgrade>
<Condition Message="ERROR: Team Explorer for Microsoft Visual Studio 2012 is not installed">
  Installed OR TFSCLIENT
</Condition>

Теперь сложно найти код обновления (указанный в атрибуте Id выше). Если у вас есть пакет MSI, просто посмотрите на него от Orca. Если нет - попробуйте это решение .

1 голос
/ 13 мая 2009

API установщика Windows имеет функцию MsiQueryProductState в msi.dll для этого. К сожалению, вам придется написать пользовательское действие, чтобы использовать это в вашем установщике. Сборки в C:\Program Files\Windows Installer XML v3\SDK могут сделать это проще.

...