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

ess*_*LAH 5 installation vdproj visual-studio

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

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

有没有办法可以告诉安装程序,如果你发现已经安装了一些文件(比如用于数据的.xml文件),那么不要覆盖它们?

我试图让我的2.0安装程序服务于两个目的:

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

Rad*_*ado 13

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

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

干杯!

[编辑]以上适用于VS 2008 SP1.没有在其他版本上尝试过,所以希望你使用相同的VS版本,或者它适用于你使用的版本.

[edit2]哦,你也可以使用"条件"属性来实现类似的东西.如果这样做,请确保将"Transitive"设置为True,以便始终评估Condition.没有尝试过条件,但这是你可以看到的另一种选择.除了这两个,我认为这几乎适用于VS部署项目.

  • 文件替换的规则在[此处] (http://msdn.microsoft.com/en-us/library/aa370531(v=VS.85).aspx)。 (2认同)

ora*_*dov 2

当我遇到类似情况时,我所做的是:

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

我将静态文件(例如用于填充下拉列表的数据)包含在 MSI 中,并且可以通过使用 Visual Studio 构建新的 MSI 来更新这些文件。

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

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

我希望这有帮助。