2009-06-22 32 views
5

我有一个Windows Forms应用程序,其中包含已经使用Visual Studio创建的安装程序(.msi)。我现在正在为版本2.0创建一个新的安装程序,并将属性RemovePreviousVersions设置为true。我们可以指示Visual Studio安装程序保留现有文件以便重新安装吗?

现在,当我安装2.0超过1.0时,它将删除1.0并完全安装2.0。

如果你发现已经安装了一些文件(比如用于数据的.xml文件),那么是否可以告诉安装程序,然后不重写它们?

我想有我2.0的安装服务2个用途:

  • 从头开始安装新的用户
  • ,现有用户的升级,但不会失去他们的自定义

回答

2

当我在类似的情况下,我做的是:

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

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

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

我从来没有看过告诉MSI不要更新MSI文件中包含的某些文件。我提出的解决方案对我来说非常完美。我不知道是否可以做到。

我希望这会有所帮助。

13

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

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

干杯

[编辑]以上是真正的VS 2008 SP1避风港” t试过它在其他版本,所以希望你使用相同的VS版本或它适用于你使用的版本

[编辑]哦,也可以使用“条件”属性来实现simil AR。如果你这样做,确保“传递”设置为True,以便始终评估条件。还没有尝试过与条件,但这是另一个选项,你可以看看。除了这两个,我认为这几乎是VS部署项目。

+0

太好了,谢谢!这应该被标记为答案。 – 2010-06-29 12:12:40

+1

文件替换的规则是[here](http://msdn.microsoft.com/zh-cn/library/aa370531(v=VS.85).aspx)。 – CyberMonk 2010-12-17 01:11:10

+0

使用VS2010 SP1。 它不适合我... 即使Permanet设置为真,文件也会被替换! 当磁盘上的文件的日期/时间早于软件包创建的日期时间时,它将被替换。 在VS2010中不是SP1,它在磁盘上的文件的日期时间早于用于创建软件包的文件的日期时间时被替换。 设置源文件的日期时间为01/01/2001解决了我很多麻烦,但它不再工作了! – 2015-10-09 15:07:29

相关问题