![](/img/trans.png)
[英]Is it ok to use the same UpgradeCode for an .msi and the WiX bundle that wraps it
[英]How to prevent WiX bundle with same UpgradeCode/Version to be installed twice
我有一个与MSI一起打包的应用程序,它与各种必需的第三方工具一起制作成WiX软件包。 我已经在MSI du中禁用了应用程序如何工作的修改和修复操作,要求在再次安装相同版本之前完全卸载。
当我单独运行MSI时,它按预期工作:安装程序无法运行两次。 再次运行完全相同的Bundle时也是如此。 但只需重建捆绑包(使用相同的UpgradeCode
和Version
),安装就会继续进行(这次要快得多),最终我在已安装的程序中重复输入。 我真的想要阻止它并使捆绑工作作为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)">
如果添加OptionalUpdateRegistration
标记,您将在注册表中获得一个条目,您可以将其用作MSI包的InstallCondition
<OptionalUpdateRegistration ProductFamily="MyProductFamily" Name="MyAppBundle"/>
<util:RegistrySearch Id="SearchForMyProduct"
Root="HKLM"
Key="SOFTWARE\WOW6432NODE\MyCompany\Updates\MyProductFamily\MyAppBundle"
Value="PackageVersion"
Result="exists" />
<MsiPackage Id="MyMsi"
InstallCondition=SearchForMyProduct
DisplayName="My Wonderful Product"
SourceFile="MyProduct.msi"
ForcePerMachine="yes"/>
这将阻止新版本的捆绑包再次安装“MyProduct”。 在从MSI安装捆绑包之后,这不会阻止捆绑包的安装。 为此,您还可以为MSI创建的密钥设置RegistrySearch
标记。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.