如何确保我的winform应用程序部署覆盖旧版本

时间:2010-02-08 13:12:32

标签: c# winforms deployment

我已经从VS2008部署项目为我的项目创建了一个msi安装包。但是在升级安装时遇到问题,以前安装的版本不会被覆盖。如何确保以前安装的版本被覆盖?

4 个答案:

答案 0 :(得分:12)

  1. 在Visual Studio中,在“解决方案资源管理器”中选择您的安装项目
  2. 打开“属性”窗口
    • 不要右键单击并选择属性。
    • 选择视图 - 属性窗口
  3. 将RemovePreviousVersions设置为true
  4. 将版本增加到更高的数字
  5. 在即将发布的消息框中选择是
  6. 如果您构建并部署了此新设置,则将删除具有旧版本号的设置。

    重要提示:设置版本号完全独立于您的应用程序或程序集版本号!

答案 1 :(得分:12)

(奥利弗的回答是正确的,但我想添加图片和更多细节)

解决方案中选择安装项目,然后打开属性窗格(工具箱旁边的标签):

enter image description here

  • 确保DetectNewerInstalledVersion为真(默认为<)>
  • InstallAllUsers设为true
  • RemovePreviousVersions设为true
  • 更新Version号码,然后按Enter
  • 在您按Enter后,Visual Studio将询问您是否要为ProductCode生成新GUID,请单击是

此外,您需要更新解决方案中每个项目的版本号,因为安装程序只会替换 DLL 数字已增加:

  • 打开每个项目的 AssemblyInfo.cs 并更新AssemblyVersionAssemblyFileVersion个数字

或者更好的方式:

  • 从每个项目中删除AssemblyVersionAssemblyFileVersion AssemblyInfo.cs
  • 使用这两行链接到解决方案中的 VersionInfo.cs 文件
  • 上述步骤:The Right Way To Version Your Assemblies

右键单击安装项目,然后选择属性(其他属性对话框):

  • Windows Installer 4.5 设置为先决条件,而不是Visual Studio默认值 Windows Installer 3.1

我不确定是否所有这些步骤都是必要的,并且可能还有其他方法来设置它,但上述步骤对我有效。

答案 2 :(得分:0)

Windows Installer内置了对文件的检查,以确保版本高于该文件的先前版本。如果不是,Windows Installer将不会覆盖它。有关Windows Installer如何处理版本控制的更多信息,请查看此MSDN文章:

http://msdn.microsoft.com/en-us/library/aa368599%28VS.85%29.aspx

答案 3 :(得分:0)

我们需要将msi文件的REINSTALLMODE属性设置为amus。

以下链接了解更多关于'amus'的含义 http://msdn.microsoft.com/en-us/library/aa371182%28VS.85%29.aspx

有两种方法可以做到。

  1. 使用.NET SDK附带的msiexec.exe(如果你有VS 2005或VS 2008,它会附带它,只需浏览到visual studio的命令提示符,你就会在那里找到它)。
  2. 一旦找到msiexec.exe,只需输入以下命令,将安装程序的REINSTALLMODE属性设置为amus。

    msiexec.exe / i foo.msi REINSTALLMODE = amus