Условная установка MsiPackage: не удалять, если обнаруживается, что пакет уже установлен - PullRequest
0 голосов
/ 04 августа 2020

Я использую Wix Bootstrapper и хочу установить несколько приложений с помощью пакетов .msi вместе с моим основным приложением. Эти приложения могут быть уже установлены в целевом P C, поэтому мне нужно сначала обнаружить их и пропустить установку, если они уже установлены. Кроме того, во время удаления эти приложения не следует удалять, так как Wix Bootstrapper не установил их.

Я пытался использовать атрибут InstallCondition, но (как и ожидалось) он удаляется, если обнаруживает, что приложение уже установлен.

Мой Bundle.wxs выглядит так:

...
  <Bundle>
    <util:FileSearch Id='CheckApplicationX' Path='[ProgramFilesFolder]ApplicationX\ApplicationX.exe' Variable='ApplicationXFile' Result='exists' />
    <Chain DisableRollback="yes">
      ...
      <MsiPackage Id="InstallApplicationX" Vital="yes" Compressed="yes" DisplayInternalUI="no" EnableFeatureSelection="no" SourceFile="..\application-x.msi" Name="Application X" DisplayName="Application X" ForcePerMachine="yes" InstallCondition="NOT ApplicationXFile" />
      ...
    </Chain>
  </Bundle>
...

Любая помощь / подсказки приветствуются!

1 Ответ

0 голосов
/ 04 августа 2020

Вы можете попытаться определить, установлены ли приложения, посмотрев в реестр Windows и попытаться определить, есть ли «следы», оставленные этими приложениями.

Вы можете использовать тег RegistrySearch чтобы выполнить условную оценку записей реестра, которые вы ищете, а затем отклонить установку.

На веб-сайте Wix есть пример, доступный по адресу по этой ссылке .

В следующем примере показано, как определить, установлен ли. NET 2.0 на целевой машине

<Property Id="NETFRAMEWORK20">
<RegistrySearch Id="NetFramework20"
                Root="HKLM"
                Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727"
                Name="Install"
                Type="raw" />
</Property>
<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again.">
    <![CDATA[Installed OR NETFRAMEWORK20]]>
</Condition>
...