首页 文章

如果它有依赖项,如何卸载WIX bundle?

提问于
浏览
1

我尝试创建一个MSI捆绑包,如果已安装该程序,将卸载该程序 . 因此,相同的MSI文件用于安装和卸载程序,但它将在第一次运行时安装,在第二次运行时卸载,依此类推 .

MSI文件与程序在同一解决方案中,并且在每次提交时都在CI服务器上构建,因此每个bundle都有一个新生成的唯一BundleId . 当我从同一个MSI文件安装/卸载时,一切正常 . 当我运行不同的MSI文件时,糟糕的事情就开始了,例如我从基于提交#1构建的MSI安装,然后在提交#2上运行MSI构建 . 在这种情况下,程序不会被卸载,因为MSI#1和MSI#2具有相同的UpgradeCode(UC),但具有不同的BundleId . 因此,WIX认为我的系统中安装了产品#1和产品#2,两者都依赖于相同的UC包 . 当我运行MSI#2时,它首先卸载自己,然后尝试卸载依赖包UC,但检测到产品#1仍然使用它,因此卸载程序无法卸载我的程序 .

这是我日志中的一个片段:

[1D5BC:3CD4][2015-04-03T14:59:58]w327: Will not uninstall package: MSIMyApp, found dependents: 1
[1D5BC:3CD4][2015-04-03T14:59:58]w328: Found dependent: {bdb84fac-4961-438f-ae94-7e586840a5f1}, name: MyApp

当我第二次运行#2时,它会检测到仍然安装了软件包并再次运行卸载!

我找到了一种解决方法,即手动从注册表中删除在地址中包含BundleUpgradeCode的UpgradeCode的所有内容

HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\

但不幸的是,这种解决方案是不可接受的,因为它必须是完全自动的 . 我对WIX做错了什么?

1 回答

  • 0

    我不知道这是否有助于解决您的问题,因为您的问题有点难以阅读,但我认为这可能是您正在寻找的 . 为了让你朝着正确的方向前进:

    “在尝试使用Burn时(我们使用不同的版本安装相同的MSI),请检查/ Installer / WhatYouInstall(对于我们:Python)/ Dependecies下的注册表是否为空 . ”

    然后,check Out This Source .

    我希望即使这不是你正在寻找的东西,它也是正确方向的一个点,可能会给你一些关于什么要检查的想法!

    美好的一天!

相关问题