如何在安装新版本期间强制部署项目更新文件?

时间:2010-11-01 14:41:26

标签: c# visual-studio-2008 deployment windows-installer

我的VS2008 C#应用程序有一个部署项目。安装新版本的应用程序时,我想确保使用安装程序中包含的文件更新文件。

我希望我的安装程序自动删除已安装应用程序的任何旧版本。为此,我遵循此程序(也称为here):

  1. 将RemovePreviousVersions设置为True
  2. 将DetectNewerInstalledVersion设置为 真
  3. 增加版本 安装程序
  4. 选择是以更改ProductCode
  5. 对于程序集,我确保AssemblyVersion设置为更高版本:

    [assembly: AssemblyVersion("1.0.*")]
    

    除了配置文件(xml文件)之外,一切都按预期工作。由于我无法找到“版本化”这些文件的方法,因此如果在目标计算机上修改了文件,我无法确保这些文件已更新。

    有没有办法做到这一点以及如何做?

    更新:我已尝试找到here

    的方法/解决方案/解决方法
    1. 直接在a中包含文件 项目如下 属性:“构建操作 - >内容 文件“和”复制到输出目录 - >始终复制“
    2. 然后将其添加到部署中 项目通过项目 输出 - >数据库 - >内容文件
    3. 不幸的是它没有任何区别。行为完全一样。

4 个答案:

答案 0 :(得分:3)

将以下属性添加到MSI的Property表中: 具有值amus的属性REINSTALLMODE

注意:这将导致MSI(版本化和非版本化)中的所有文件覆盖系统上的文件。

答案 1 :(得分:2)

如果您愿意使用Orca(可能有另一种方法来执行此方法,但它是我所知道的唯一方法),您可以设置RemoveFile指令。

在这里查看一个典型的轻量级MSDN文档 - 可能是一个起点。 http://msdn.microsoft.com/en-us/library/aa371201.aspx

或者你总是可以创建一个非常简单的bootstrapper可执行文件,只需调用“msiexec / i REINSTALLMODE = oums”(或者需要任何命令行开关)。如果你愿意,可以将它命名为setup.exe。

长期更好的选择可能是切换到InstallShield或类似的 - VS2010包含轻量级的IS,我相信他们正在远离vdproj项目。

答案 2 :(得分:1)

您是否尝试过找到here的方法/解决方案/解决方法?

  1. 直接在a中包含文件 项目如下 属性:“构建操作 - >内容 文件“和”复制到输出目录 - >始终复制“
  2. 然后将其添加到部署中 项目通过项目 输出 - >数据库 - >内容文件

答案 3 :(得分:0)

我可能在这里不正确,因此我将自己暴露在投票中,但无论如何都要去了!

我认为配置文件不会被自动覆盖;原则是你通常不希望在安装新版本的程序时覆盖你的应用程序的配置...至少没有很多警告和/或首先合并配置的机会。

让您的应用程序配置被程序的更新版本覆盖可能会使最终用户感到非常不安(在本例中为网站管理员)。


此外,我知道有时,开发人员可能是进行部署的人。在这种情况下,将单个站点部署到单个服务器时,此行为可能看起来不那么合理;但是当角色被拆分和/或你有多个服务器具有不同的配置时,这可以节省生命。