基本上,我删除了原始问题中发布的任何启动逻辑,并创建了一个新软件包,其唯一功能是启动应用程序(使用自定义操作),并且其位置以前已保存在注册表中 - 也就是说,当应用程序发现有更新可用时运行,请在注册表中设置此项。 如果之前已经安装了其他软件包之一 - 通过注册表中存在的密钥(在每个产品的MSI中设置)找到该软件包(以下称为PostInstall),则仅运行该软件包。这意味着新安装完成后将不会自动启动应用程序。 以下是引导程序包(我的例子中是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>
... 展开详请