代码之家  ›  专栏  ›  技术社区  ›  Simon Fischer

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

  •  3
  • Simon Fischer  · 技术社区  · 14 年前

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

    我希望安装程序自动删除已安装应用程序的任何旧版本。为此,我遵循以下步骤(也描述了 here ):

    1. 将removePreviousVersions设置为true
    2. 将DetectNewerInstalledVersion设置为 真
    3. 增加的版本 安装程序
    4. 选择“是”更改产品代码

    对于程序集,我确保将assemblyversion设置为更高的版本:

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

    除了我的配置文件(XML文件)外,其他一切都按预期工作。因为我找不到“版本”这些文件的方法,所以如果在目标计算机上修改了这些文件,我就无法确保它们得到更新。

    有什么办法吗?怎么做?

    更新: 我尝试过找到的方法/解决方案/解决方案 here

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

    不幸的是,这没有任何区别。行为完全相同。

    4 回复  |  直到 14 年前
        1
  •  2
  •   CJBrew    14 年前

    如果您愿意使用ORCA(可能还有另一种方法,但这是我所知道的唯一一种方法),那么您可以设置removefile指令。

    请参阅这里,了解通常重量较轻的msdn文档——可能是一个起点。 http://msdn.microsoft.com/en-us/library/aa371201.aspx

    或者,您可以创建一个非常简单的引导程序可执行文件,它只调用“msiexec/i reinstallmode=oums”(或者需要的命令行开关)。如果你喜欢的话就叫它setup.exe…

    长期来看,更好的选择可能是切换到InstallShield或类似产品——VS2010包含了一个较轻版本的IS,我相信他们正在远离vdproj项目。

        2
  •  3
  •   Linda    14 年前

    将以下属性添加到msi的属性表中: 属性ReinstallMode,值为amus

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

        3
  •  1
  •   Community pid    7 年前

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

    1. 将文件直接包含在 项目包括以下内容 属性:“生成操作->内容 文件“和”复制到输出目录 ->始终复制“
    2. 然后将其添加到部署中 项目VIA项目 输出->数据库->内容文件
        4
  •  0
  •   Andrew Barber Eric Lafortune    14 年前

    我在这里可能是不正确的,因此我将自己暴露在选票不足的情况下,但不管怎么说,这就是结果!

    我相信配置文件不会自动被覆盖是有目的的;原则是,在安装新版本的程序时,您通常不会希望应用程序的配置被覆盖…至少在没有大量警告和/或先合并配置的机会的情况下。

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


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