Ответ 1
У него было несколько шагов. Помните, что я запускал это из загрузочного файла, а не файла MSI, поэтому ответа levarius было бы достаточно.
В принципе, я удалил любую логику запуска, которая была отправлена в исходном вопросе, и создала новый пакет, единственной функцией которого было запустить приложение (с помощью настраиваемого действия) и местоположение которого ранее было сохранено в в реестре, то есть при запуске приложения, когда он обнаружил, что обновление доступно, установите этот элемент в реестр.
Затем пакет (называемый PostInstall ниже) запускается ТОЛЬКО, если один из других пакетов был установлен ранее - найден по наличию ключа в реестре (установленному в каждом продукте MSI). Это означает, что никакое приложение не будет запущено автоматически после завершения новой установки.
Ниже приведено описание пакета bootstrapper (WiX 3.6 в моем случае)
<!-- Determine what items are installed in the event of an upgrade-->
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\CompanyName"
Value="ProductAInstalled"
Variable="ProductAInstalled"
Result="exists"
Format="raw" />
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\CompanyName"
Value="ProductBInstalled"
Variable="ProductBInstalled"
Result="exists"
Format="raw" />
<Chain>
<!-- Package for .NET prerequisite. References a Package that is
actually in the referenced WiX file WixNetFxExtension. -->
<PackageGroupRef Id="NetFx40Web"/>
<MsiPackage SourceFile="..\SetupProductA\bin\Release\SetupProductA.msi"
InstallCondition="(chkProductA) OR (ProductAInstalled)" />
<MsiPackage SourceFile="..\SetupProductB\bin\Release\SetupProductB.msi"
InstallCondition="(chkProductB) OR (ProductBInstalled)" />
<!-- Run PostInstall only if this was run as part of an upgrade. -->
<!-- NB: This is the portion that kicks off the downloaded bootstrapper. -->
<MsiPackage SourceFile="..\PostInstall\bin\Release\PostInstall.msi"
InstallCondition="(ProductAInstalled) OR (ProductBInstalled)" />
</Chain>