我尝试创建一个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做错了什么?
答案 0 :(得分:0)
我不知道这是否有助于解决您的问题,因为您的问题有点难以理解,但我认为这可能是您正在寻找的问题。为了让你朝着正确的方向前进:
"在尝试使用Burn时(我们使用不同的安装相同的MSI) build),检查/ Installer / WhatYouInstall下的注册表 (对我们来说:Python)/ Dependecies是空的。"
我希望即使这不是你正在寻找的东西,它也是正确方向的一个点,可能会给你一些关于要检查什么的想法!
美好的一天!