1

我已经升级了一个旧的基于 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 有关。

4

0 回答 0