我有一个VS2008安装项目,它创建一个安装WinForms应用程序(C#)的setup.msi。
每次更新版本号时,用户首先必须卸载以前的版本才能安装新版本。否则我们会得到可怕的“此产品的另一个版本已安装”消息。
这是我在构建新版安装程序时已经在做的事情:
然而它仍然拒绝卸载以前的版本。那么,我错过了什么?或者我做错了什么?
谢谢!
答案 0 :(得分:19)
半回答我自己的问题,只是为了所有感兴趣的人的利益:
首先,我找到了关于MSI更新如何工作的incredibly useful article。
其次,我找到了InstEd,一个相当不错的免费软件MSI编辑器,它向我展示了我的MSI文件没有明显错误。 (是的,我可以使用Orca,如果我不介意下载整个Windows SDK来获取它。)
第三,令人讨厌的是,原来的问题似乎已经解决了,我再也无法重现了。如果它回来了,如果我再次修复它,我会在这里添加评论!
无论如何,所有这些都带来了一个新的 - 可以说是更糟糕的 - 问题:MSI现在声称更新应用程序,但实际上没有安装任何东西!解决方案如下:
答案 1 :(得分:5)
让它安装在以前的版本上:
请记住,即使您重建解决方案,它也不会重建安装项目。您需要将安装项目重建为单独的步骤。
其次,您不需要每次都增加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项目属性中)。因此,从控制面板卸载以前的安装后,更新现在可以正常工作。也许这有助于某人。