【问题标题】:How to tell MSI not to ovewrite existing file in Setup & Deployment Project in VS2005?如何告诉 MSI 不要覆盖 VS2005 的安装和部署项目中的现有文件?
【发布时间】:2009-08-26 09:02:27
【问题描述】:

我在 VS2005 中有一个设置和部署项目。我正在安装的文件之一是 SQLite 数据文件。

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

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

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

有什么建议吗?

【问题讨论】:

    标签: visual-studio-2005 installation setup-project


    【解决方案1】:

    好的,这是我使用的解决方法:

    • 在我的安装项目中,我已将空白数据库文件从 Database.db 重命名为 Database-blank.db。
    • 在我的应用程序中,我正在检查 Database.db 是否缺失,如果缺失,则将 Database-blank.db 复制到 Database.db。
    • 然后只需加载现有的 Database.db

    这样我可以确保数据文件 (Database.db) 的本地副本不会被较新版本的软件替换。

    【讨论】:

      【解决方案2】:

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

      我不知道安装和部署项目是否支持这些。因此,作为后备方案,请使用不同的名称安装文件,然后创建一个有条件地复制文件的自定义操作。

      【讨论】:

        【解决方案3】:

        因为首先升级程序时 VS2005 设置会删除原始安装的实例 然后安装一个新的,这样每次都会删除该文件。

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

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

        【讨论】:

        • 感谢您的意见,Wael。实际上,如果文件自安装后发生更改,id 不会删除该文件。我已经尝试过使用 Permanent 和 ReadOnly 的建议,但它仍然会覆盖文件。
        猜你喜欢
        • 2012-12-11
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多