VS2008安装项目:卸载以前的MSI

时间:2010-01-15 15:56:01

标签: c# visual-studio winforms windows-installer installation

我有一个VS2008安装项目,它创建一个安装WinForms应用程序(C#)的setup.msi。

每次更新版本号时,用户首先必须卸载以前的版本才能安装新版本。否则我们会得到可怕的“此产品的另一个版本已安装”消息。

这是我在构建新版安装程序时已经在做的事情:

  • 设置 RemovePreviousVersions = true和 DetectNewerInstalledVersion = true
  • 增加 AssemblyVersion (正在部署的exe文件)
  • 增加版本(安装项目)
  • 生成新的 ProductCode (根据VS的提示,更改版本时)
  • 保持 UpgradeCode 不变

然而它仍然拒绝卸载以前的版本。那么,我错过了什么?或者我做错了什么?

谢谢!

6 个答案:

答案 0 :(得分:19)

半回答我自己的问题,只是为了所有感兴趣的人的利益:

首先,我找到了关于MSI更新如何工作的incredibly useful article

其次,我找到了InstEd,一个相当不错的免费软件MSI编辑器,它向我展示了我的MSI文件没有明显错误。 (是的,我可以使用Orca,如果我不介意下载整个Windows SDK来获取它。)

第三,令人讨厌的是,原来的问题似乎已经解决了,我再也无法重现了。如果它回来了,如果我再次修复它,我会在这里添加评论!

无论如何,所有这些都带来了一个新的 - 可以说是更糟糕的 - 问题:MSI现在声称更新应用程序,但实际上没有安装任何东西!解决方案如下:

  • AssemblyVersion并不重要,但是 AssemblyFileVersion绝对 :如果要安装新文件,必须递增。 (与VS2005相比,这是VS2008的变化。例如,请参阅Microsoft上的this discussion 基团。)
  • 但是,AssemblyFileVersion无法自动增加AssemblyVersion的方式 能够。将其设置为1.9。*(或 什么,只会导致一个 错误。这次来自Stack Overflow的解决方案是设置 AssemblyVersion to autoincrement,and 然后打开AssemblyInfo.cs并删除 AssemblyFileVersion属性 共。这将强制该文件 版本等于程序集 版本

答案 1 :(得分:5)

让它安装在以前的版本上:

  1. 突出显示设置项目。
  2. 按F4键获取属性。 (右键单击是一个不同的属性框。)
  3. 更改版本。对提示要求更改产品代码说“是”。
  4. 请记住,即使您重建解决方案,它也不会重建安装项目。您需要将安装项目重建为单独的步骤。

    其次,您不需要每次都增加AssemblyVersion。将它设置为2.1。*之类的东西,它会自动完成。

答案 2 :(得分:4)

我对VS 2008安装项目并不是100%熟悉(我自己使用Advanced Installer - 强烈推荐它BTW;他们甚至有免费版本!),但我之前遇到过这个问题并且没有记录到清晰。

版本号有4个部分 - 你很清楚我很确定:Major.Minor.Build.Revision。 Windows安装程序不会检查REVISION。如果你所做的只是增加修订,它将无法正常工作。您必须至少增加ProductVersion值的构建。

希望有所帮助!

答案 3 :(得分:0)

安装程序服务正在根据升级表的内容做出决策,这就是我的目标。该表是否包含升级代码的条目,当前安装的版本的产品版本是否在为升级指定的版本范围内,属性是否正常(例如,未设置msidbUpgradeAttributesOnlyDetect属性)等等。

MSDN在此处对此进行了描述 - http://msdn.microsoft.com/en-us/library/aa372379%28VS.85%29.aspx

答案 4 :(得分:0)

不要忘记增加assemblyFileVersion!如果未指定程序集文件版本,则编译器假定它与assemblyVersion相同。但是,如果指定了assemblyFileVersion,则必须递增它。

答案 5 :(得分:0)

我来这里是为了解决同样的问题。阅读链接incredible useful article之后,我认为我的问题是,我安装了以前版本的“Just me”选项,新安装程序选择了InstallAllUsers属性(在Visual Studio项目属性中)。因此,从控制面板卸载以前的安装后,更新现在可以正常工作。也许这有助于某人。