3

当我尝试对我的应用程序进行小升级时,我会启动安装程序,并且(取决于我尝试的设置组合)我会得到:

  • 修复/删除对话框
  • 提示安装目录

我不相信我应该得到这些提示中的任何一个。我主要期望安装程序自动应用升级而不提示任何内容。我想我在 Visual Studio 安装项目中做的一切都是正确的:

  • 将版本从 1.0.0 升级到 1.1.0
  • 留下相同的产品代码
  • 更新了包代码
  • 保留升级代码相同
  • 使用参数 REINSTALLMODE=vomus REINSTALL=ALL 启动安装程序

我已经尝试了几乎所有代码/标志和技术的组合,但似乎无法应用更新。

关于我还能尝试什么的任何想法?

4

2 回答 2

1

为了让它工作,我:

  • 将版本从 1.0.0 升级到 1.1.0
  • 保持产品代码不变(在 Visual Studio 提示时说否)
  • 更新了包代码(Visual Studio 自动执行此操作)
  • 没有更改升级代码
  • 使用参数 REINSTALLMODE=vomus REINSTALL=ALL 启动安装程序

Just as I had indicated in my question, and it seems to be working. I can successfully apply an upgrade. However, when I run the installer I am still prompted with a repair/remove option. But, that's a different question I guess.

于 2012-08-30T16:02:37.500 回答
0

首先要做的事情您确定您没有在两个 MSI 文件中或在部署工作和测试期间的某个时间点重新使用包 GUID ?

尝试使用新的 GUID 重新构建两个 MSI 文件,以将它们与任何现有的缓存版本“分离”,然后再次尝试测试安装。更改包装代码和产品代码。更好的是:在干净的虚拟机上测试这些新版本,以确保正确的测试环境不受过去的罪恶影响。由于包 guid 冲突,您的开发人员系统的 Windows 安装程序数据库中可能有 gremlins。如果是这种情况,包安装就变成了全部 XFiles - 可能会发生最奇怪的事情。


更多详细信息:如果两个 MSI 文件的包 GUID 相同,则 Windows Installer 将根据定义将它们视为相同的文件 - 无论它们包含什么。这可能会导致各种难以清理和调试的奇怪问题。请注意,即使您只是忘记更新一次,也可能会发生这种情况,因为安装 MSI 会导致它缓存在系统上的 C:\Windows\Installer 文件夹中(该文件夹被隐藏并受保护)。如果启动具有相同 GUID 的 MSI 文件,将重新使用此缓存副本(至少早期版本的 Windows Installer 是这种情况 - 现在可能会对此进行修复)。

如果您使用的是 Installshield,您应该启用“始终生成打包 GUID”功能以确保永远不会发生这种情况。包 GUID 应始终针对每个构建进行更改 - 没有任何理由对其进行硬编码。我相信 WIX 会自动生成包 GUID,除非您专门覆盖它。

于 2012-08-30T08:21:55.900 回答