我在VS2005中有一个设置&部署项目。我正在安装的一个文件是一个SQLite数据文件。如何告诉MSI不要在VS2005中设置和部署项目中覆盖现有文件?
我即将发布该软件的新版本,但我发现如果在现有安装上运行更新,它会覆盖数据文件。
我在安装项目中有一个更新的数据文件,因此它比已经安装的更新,但我不想覆盖它。
我试着设置该文件的永久属性为True,但无济于事。
有什么建议吗?
我在VS2005中有一个设置&部署项目。我正在安装的一个文件是一个SQLite数据文件。如何告诉MSI不要在VS2005中设置和部署项目中覆盖现有文件?
我即将发布该软件的新版本,但我发现如果在现有安装上运行更新,它会覆盖数据文件。
我在安装项目中有一个更新的数据文件,因此它比已经安装的更新,但我不想覆盖它。
我试着设置该文件的永久属性为True,但无济于事。
有什么建议吗?
好吧,下面是我用一种变通方法:我已经改名为从Database.db我的空白数据库文件,以数据库为blank.db
这样我可以保证数据文件(Database.db)的本地副本没有得到由软件的新版本替换。
在MSI中,最好的方法是在Upgrade table中创建一个记录,确定这是否是升级安装,并设置属性(如果是)。然后将数据文件放在component中,并在组件上放置条件。或者,在AppSearch table中输入一个条目,检查是否存在该文件(通过DrLocator table)。
我不知道设置&部署项目是否支持这些。因此,作为回退,以不同的名称安装该文件,然后创建一个自定义操作,以便有条件地复制该文件。
由于VS2005安装程序首先升级程序时,首先删除原来安装的实例 ,然后安装一个新的程序,以便每次删除该文件。
避免替换或覆盖文件我建议如下: 1-在安装项目中将文件标记为只读文件。在设置项目中将文件标记为永久文件。
现在升级文件后,它不会被覆盖,但是你的应用程序不能处理这个文件,因为它是只读的,所以在你的应用程序启动时检查数据文件是否只读取消。
感谢您的输入,Wael。 实际上,如果文件在安装后发生更改,它不会删除该文件。 我试过你的建议永久和只读,但它仍然覆盖该文件。 – Muxa 2009-08-26 09:55:25