InstallShield LE"此产品的另一个版本已经注册"

Eri*_* J. 8 visual-studio-2010 installshield-2011

我在VS2010中使用InstallShield LE遇到了障碍.第二次运行生成的setup.exe(增加版本号),我收到错误

该产品的另一个版本已经注册

通过"递增的版本号",我的意思是我将Minor版本,Build Number和Revision更改为我的.exe的AssemblyVersion和AssemblyFileVersion中的较大数字(DLL的设置为"1.0.*")

[assembly: AssemblyVersion("0.2.103.005")]
[assembly: AssemblyFileVersion("0.2.103.005")]
[assembly: AssemblyInformationalVersion("Alpha 0.1 - 2/8/2011")]
Run Code Online (Sandbox Code Playgroud)

并且还在Installshield LE安装项目的"常规信息"选项卡中将产品版本从0.10.0000更新为0.11.0000.

我确实在其他SO帖子和制造商的社区支持论坛上遇到过此错误消息的实例,但未找到适用于我的解决方案.

Eri*_* J. 12

事实证明,答案是在"升级路径"选项卡上创建一个条目.执行此操作时,InstallShield LE将显示文件选择对话框.如果您有旧的安装程序,可能您可以浏览它以获取有关您希望从哪个版本升级的信息.在我的情况下,我没有方便的旧安装程序,所以我按下取消,无论如何创建了新的升级路径条目.然后,我调整了该条目的属性,以指定升级的最小和最大版本,并且一切都按预期工作.

编辑

(来自@ lookatmike的评论)

您还必须在常规信息选项卡中更改产品版本和(有点违反直觉)产品代码.升级代码必须保持不变.

  • 埃里克,这对我不起作用.你还有其他重要的事吗?我正在"常规信息"选项卡中增加"产品版本",并且我添加了一个具有广泛的最小和最大版本范围的升级路径,而不包括任何以前安装的版本. (2认同)
  • 要扩展Eric上面接受的答案,除了按照他的描述指定升级路径之外,还必须在常规信息选项卡中更改产品版本和(有点违反直觉)产品代码.升级代码**必须保持不变. (2认同)
  • 如果您更改产品代码,您实际上是在告诉 Windows 这是一个不同的产品。因此,如果您安装产品 1.0,然后使用不同的产品代码升级到 1.2,则 1.0 的文件将被覆盖,但添加删除程序列表中将有 2 个条目。不应因次要升级而更改产品代码。 (2认同)

Ste*_*eve 7

好的 - 这个问题让我疯狂 - 而且我还没有在网上找到一个完美的答案.

所以我决定搞砸了.

这可能不是解决问题的"最佳"方式 - 我确信有一些基于MSI的复杂方式"正确处理"但我无法弄明白(我想我很笨?)

基本上我的安装程序只是确保安装了.NET,并将一些文件复制到Program Files目录,添加了一些注册表项,快捷方式等.

如果你有一个更复杂的安装程序 - 我鼓励你在别处找到"正确"的答案.但是对于像我这样简单的事情(我怀疑95%的人都在努力解决这个问题)这样做很好.

首先 - 永远不要触摸"产品代码".我相信这是MSI全面正确的程序......你不应该改变产品代码.而这个解决方案也依赖于此.

下一步 - 将产品代码复制到剪贴板 - 我们将在一秒钟内完成.

基本上,如果机器上已经存在,我们将告诉InstallShield始终卸载该产品.

在此输入图像描述

在此输入图像描述

如果您或您的合作伙伴曾经安装过SILENTLY - 请确保在以下两个位置执行此操作:

在此输入图像描述

对于"文件名和命令行",请输入:

msiexec /uninstall {YOUR PRODUCT CODE HERE} /passive

而已.现在,您的安装程序将始终卸载旧版本.

注意:这会消除"我是否运行较新版本的安装程序"的任何排序"检查".