我已经升级了一个旧的基于 Wix 的安装程序,它同时具有一个 MSI 生成项目和一个引导程序项目(在 Visual Studio 中)。引导程序通过检查 .Net 先决条件/下载来对 MSI 进行排序。新的 Wix# 项目只生成了一个 MSI,它安装和工作都很好,除了我无法用它来替换旧的安装。我已经设置了新项目 UpgradeCode 以匹配我在旧 MSI 项目中看到的内容(并且在卸载列表中的 Windows 注册表中)。我看到 UpgradeCode 正在生成到 WXF 文件中。但是当我无法让它工作时,我尝试将其设置为与自安装引导程序中的 UpgradeCode 匹配(这是最终用户运行的)。那没有帮助。
我在这里和这里读过类似的经历。我还设置了几种不同的升级策略,包括:
project.MajorUpgrade = MajorUpgrade.Default;
和:
project.MajorUpgrade = new MajorUpgrade
{
Schedule = UpgradeSchedule.afterInstallInitialize,
AllowDowngrades = true,
IgnoreRemoveFailure = true,
AllowSameVersionUpgrades = false
};
和:
project.MajorUpgradeStrategy = new MajorUpgradeStrategy
{
RemoveExistingProductAfter = Step.InstallInitialize,
UpgradeVersions = new VersionRange
{
Maximum = project.Version.ToString(),
IncludeMaximum = false,
MigrateFeatures = false
},
PreventDowngradingVersions = new VersionRange
{
Minimum = project.Version.ToString(),
IncludeMinimum = false
},
NewerProductInstalledErrorMessage = "A newer version of [ProductName] is already installed. Setup will now exit."
};
以及这些主题的各种变化。我所做的一切都没有影响行为,也就是说,在安装后,应用程序的旧版本和新版本都列在添加/删除 Windows 列表中。这条迁移路径是否缺少一些秘诀?
更新:
我已经意识到我的最后一次片段尝试实际上是有效的*。它会触发除 Windows 添加/删除程序中的条目之外的所有内容的删除!这可能是由于新安装程序中应用程序的名称更改造成的吗?或者它可能由于旧的引导程序而仍然存在,因为我正在使用旧 MSI 的 UpgradeCode 而没有对引导程序做任何特定的事情?
更新2:
“旧”安装程序具有安装程序的 MSI 和 EXE(引导程序)版本。如果我只是使用旧的 MSI 安装,然后运行新的 MSI,一切正常。因此,这似乎与运行未删除的引导程序 EXE 有关。