2009-08-26 64 views
2

我在VS2005中有一个设置&部署项目。我正在安装的一个文件是一个SQLite数据文件。如何告诉MSI不要在VS2005中设置和部署项目中覆盖现有文件?

我即将发布该软件的新版本,但我发现如果在现有安装上运行更新,它会覆盖数据文件。

我在安装项目中有一个更新的数据文件,因此它比已经安装的更新,但我不想覆盖它。

我试着设置该文件的永久属性为True,但无济于事。

有什么建议吗?

回答

1

好吧,下面是我用一种变通方法:我已经改名为从Database.db我的空白数据库文件,以数据库为blank.db

  • 在我的安装项目。
  • 在我的应用程序中,我正在检查Database.db是否丢失,并将Database-blank.db复制到Database.db中(如果是)。
  • 然后只需加载现有Database.db

这样我可以保证数据文件(Database.db)的本地副本没有得到由软件的新版本替换。

0

在MSI中,最好的方法是在Upgrade table中创建一个记录,确定这是否是升级安装,并设置属性(如果是)。然后将数据文件放在component中,并在组件上放置条件。或者,在AppSearch table中输入一个条目,检查是否存在该文件(通过DrLocator table)。

我不知道设置&部署项目是否支持这些。因此,作为回退,以不同的名称安装该文件,然后创建一个自定义操作,以便有条件地复制该文件。

0

由于VS2005安装程序首先升级程序时,首先删除原来安装的实例 ,然后安装一个新的程序,以便每次删除该文件。

避免替换或覆盖文件我建议如下: 1-在安装项目中将文件标记为只读文件。在设置项目中将文件标记为永久文件。

现在升级文件后,它不会被覆盖,但是你的应用程序不能处理这个文件,因为它是只读的,所以在你的应用程序启动时检查数据文件是否只读取消。

+0

感谢您的输入,Wael。 实际上,如果文件在安装后发生更改,它不会删除该文件。 我试过你的建议永久和只读,但它仍然覆盖该文件。 – Muxa 2009-08-26 09:55:25