无论如何,在没有 ARP 中的双重条目的情况下,是否可以使用 .msi 升级 .exe 安装的程序?

Is there anyway to upgrade a .exe installed program with .msi without a double entry in ARP?

我目前正在使用 WiX 工具集构建我的安装程序。这个工具很不错,但是最近我遇到了一个问题。当我用 .exe 安装我的程序,然后用 .msi 升级它时,Add/Remove 程序中有一个双项。有没有办法防止安装程序添加重复输入?谢谢!

从你的 post 中不清楚你是否遵循了重大升级的规则,例如使用相同的 UpgradeCode,新的 ProductCode 和 PackageCode,在前三个字段中增加 ProductVersion,在放置在 MSI 中(例如主要升级元素)。您需要为旧版本和升级版本中的这些提供 WiX 源以查看差异。详细日志也有帮助,使用包含 /l*vx [日志文件路径]

的命令行安装 MSI

如果遵循了这些规则,升级失败的主要原因是一个是针对每个用户,另一个是针对每个机器(反之亦然)。一个上下文不会升级另一个。如果是这种情况,日志将在某处有一个条目,其中 FindRelatedProducts 指的是另一个上下文中已安装的产品。

所有这一切还假设您所做的原始安装是基于 MSI 的 exe。如果不是,并且是其他一些未使用 MSI 文件的安装软件,则没有自动升级之类的东西。您需要找到一些 none-MSI 方法来卸载旧产品。一种典型的方法是在该产品的注册表中找到 UninstallString 并 运行 它。根据所使用的软件,可以解析该命令以添加静默选项。