如何防止具有相同UpgradeCode/Version的WiX捆绑包安装两次

Tor*_*edt 9 windows-installer wix

我有一个与MSI一起打包的应用程序,它与各种必需的第三方工具一起制作成WiX软件包.我已经在MSI du中禁用了应用程序如何工作的修改和修复操作,要求在再次安装相同版本之前完全卸载.

当我单独运行MSI时,它按预期工作:安装程序无法运行两次.再次运行完全相同的Bundle时也是如此.但只需重建捆绑包(使用相同UpgradeCodeVersion),安装就会继续进行(这次要快得多),最终我在已安装的程序中重复输入.我真的想阻止它并使捆绑工作为MSI.

我已尝试在捆绑上设置各种条件; NOT WixBundleInstalled,WixBundleInstalled != 1等,但这些方法都似乎工作.

作为参考,这是bundle声明:

<Bundle UpgradeCode="{FAF9CBDD-BE89-4B18-9921-FD5B426B5B0C}" IconSourceFile="$(var.SolutionDir)Resources\product.ico" 
          Name="Product 4.4" Version="4.4.0.0" Manufacturer="My Company" DisableModify="yes" Condition="NOT (WixBundleInstalled = 1)">
Run Code Online (Sandbox Code Playgroud)

小智 2

如果添加OptionalUpdateRegistration标签,您将在注册表中获得一个条目,您可以将其用作InstallConditionMSI 包的条目

<OptionalUpdateRegistration ProductFamily="MyProductFamily" Name="MyAppBundle"/>
Run Code Online (Sandbox Code Playgroud)
<util:RegistrySearch Id="SearchForMyProduct" 
                     Root="HKLM" 
                     Key="SOFTWARE\WOW6432NODE\MyCompany\Updates\MyProductFamily\MyAppBundle" 
                     Value="PackageVersion" 
                     Result="exists" />
Run Code Online (Sandbox Code Playgroud)
<MsiPackage Id="MyMsi"
            InstallCondition=SearchForMyProduct
            DisplayName="My Wonderful Product"
            SourceFile="MyProduct.msi"
            ForcePerMachine="yes"/>
Run Code Online (Sandbox Code Playgroud)

这将阻止新版本的捆绑包再次安装“MyProduct”。这不会阻止您从 MSI 安装捆绑包后安装它。为此,您还可RegistrySearch以为 MSI 创建的密钥添加一个标签。