Visual studio 我们是否可以指示Visual Studio安装程序保留现有文件以便重新安装?

Visual studio 我们是否可以指示Visual Studio安装程序保留现有文件以便重新安装?,visual-studio,installation,vdproj,Visual Studio,Installation,Vdproj,我有一个Windows窗体应用程序,其安装程序(.msi)已使用Visual Studio创建。我现在正在为2.0版创建一个新的安装程序,其属性RemovePreviousVersions设置为true 现在,当我在1.0上安装2.0时,它会删除1.0并完全安装2.0 是否有一种方法可以告诉安装程序,如果您发现一些已经安装的文件(如用于数据的.xml文件),那么不要覆盖它们 我正试图让我的2.0安装程序实现以下两个目的: 为新用户从头开始安装 现有用户将升级,但不会丢失其自定义设置 当我处于类

我有一个Windows窗体应用程序,其安装程序(.msi)已使用Visual Studio创建。我现在正在为2.0版创建一个新的安装程序,其属性
RemovePreviousVersions
设置为true

现在,当我在1.0上安装2.0时,它会删除1.0并完全安装2.0

是否有一种方法可以告诉安装程序,如果您发现一些已经安装的文件(如用于数据的.xml文件),那么不要覆盖它们

我正试图让我的2.0安装程序实现以下两个目的:

  • 为新用户从头开始安装
  • 现有用户将升级,但不会丢失其自定义设置

    • 当我处于类似情况时,我所做的是:

      MSI(不在Visual Studio安装项目中)中不包括由每个用户自定义且安装程序不应触摸的文件。当应用程序第一次运行时,我通过代码生成了XML文件

      MSI中包含的静态文件(例如,用于填充DropDownList的数据),我可以通过使用Visual Studio构建新的MSI来更新这些文件

      基本上不要在MSI项目中包含可自定义的文件。在代码中为新用户创建它们

      我从未考虑过告诉MSI不要更新MSI文件中包含的某些文件。我想出的解决办法对我来说是完美的。我不知道是否能做到


      我希望这会有所帮助。

      VS中的部署项目不会覆盖文件。发生的情况是,由于RemovePreviousVersions已设置为true,因此当您更改安装项目的程序文件版本和ProductCode GUID时,它将首先卸载以前的版本,然后重新安装新版本

      为了确保某些文件不会被覆盖,我通常将它们从内容或主输出文件(无论它们位于何处)中排除,然后将它们单独添加到安装项目中。为此,您可以单独设置这些文件的属性。您正在查找的属性称为“永久”,如果设置为true,将永远不会卸载有问题的文件,因此将永远不会用新版本覆盖它。唯一的缺点是,在卸载产品时,永久文件不会从其目标位置删除,但在我的情况下(通常是本地数据库文件),这是一件好事;)

      干杯

      [编辑]以上内容适用于VS 2008 SP1。没有在其他版本上尝试过,因此希望您使用的是相同的VS版本,或者它适用于您使用的版本


      [edit2]哦,您也可以使用“Condition”属性来实现类似的功能。如果您这样做,请确保“Transitive”“设置为True,因此始终对条件进行评估。我还没有在条件下尝试过,但这是你可以考虑的另一个选择。除了这两个,我认为VS部署项目基本上就是这样

      文件替换的规则是[here]()。使用VS2010 SP1。这对我不起作用。。。即使Permanet设置为true,文件也会被替换!!!当磁盘上文件的日期/时间早于包创建的日期/时间时,它将被替换。在VS2010而不是SP1中,当磁盘上文件的日期时间早于用于创建包的文件的日期时间时,它被替换。将源文件的日期时间设置为01/01/2001解决了我很多问题,但它不再工作!!!