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

Mat*_*hop 13 c# installation windows-installer visual-studio winforms

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

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

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

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

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

谢谢!

Mat*_*hop 19

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

首先,我发现了一篇关于MSI更新如何工作的非常有用的文章.

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

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

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

  • AssemblyVersion无关紧要,但AssemblyFileVersion绝对 可以:如果你想要安装新文件,它必须增加.(与VS2005相比,这是VS2008的变化.例如,请参阅有关Microsoft群组的讨论.)
  • 但是,AssemblyFileVersion无法自动增加AssemblyVersion的方式.将其设置为1.9.*(或其他)只会导致错误.这次来自Stack Overflow的解决方案是将AssemblyVersion设置为自动增量,然后打开AssemblyInfo.cs并完全删除AssemblyFileVersion属性.这将强制文件版本等于程序集版本.


JBr*_*oks 5

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

  1. 突出显示安装项目.
  2. 按F4键获取属性.(右键单击是一个不同的属性框.)
  3. 更改版本.对提示要求更改产品代码说"是".

请记住,即使您重建解决方案,它也不会重建安装项目.您需要将安装项目重建为单独的步骤.

其次,您不需要每次都增加AssemblyVersion.将它设置为类似2.1.*,它将自动执行.