【问题标题】:Visual Studio 2010 Setup Project: Overwrite a file even if it has changed?Visual Studio 2010 安装项目:即使文件已更改,也要覆盖文件?
【发布时间】:2016-06-14 14:09:00
【问题描述】:

我有一个 Visual Studio 2010 安装项目,我正在尝试创建一个升级到我的软件的新版本。

升级过程正在运行。我正确更新了版本号,这导致了产品代码的更新。 RemovePreviousVersions 也是 True。

我的问题是,当我升级我的软件时,在运行软件的过程中,本地文件系统上可能有一个文件发生了变化。我发现,由于文件已更改,安装程序拒绝覆盖它。
我希望我的安装程序强制这个文件被新版本覆盖。

我能做些什么——在 Visual Studio 中、使用 Orca 或其他方式——强制覆盖文件,即使它已更改?

更新:在 Orca 中,我注意到“文件”表包含一个“文件大小”列。我相信这可能是文件被忽略的原因。如果文件的大小已更改,则不匹配。有什么办法可以覆盖吗?

【问题讨论】:

    标签: visual-studio-2010 setup-project orca


    【解决方案1】:

    您无法安全地更改 Windows Installer 替换规则,但您会遇到这种情况,因为升级机制首先在旧产品之上安装升级(调用文件替换规则),然后卸载旧产品,参考计数取下产品。问题在于“顶部”。如果将 InstallExecuteSequence 中的 RemoveExistingProducts 从 InstallFinalize 之前移动到 InstallInitialize 之后,您将完全卸载旧产品,然后安装新升级。如果您希望保留数据文件,这可能行不通。

    否则,您可以将 RemoveFile 表与 Orca 一起使用。您将添加一个针对与文件对应的组件名称的条目(查看 File 表,RemoveFile 表中可能已经有一些条目作为示例)。您将值设置为“安装时删除”。 RemoveFiles 操作发生在安装新文件之前,因此它应该可以工作。

    【讨论】:

    • 我确实使用了 RemoveFile 表,并将 RemoveExistingProducts 步骤移到了更早的位置,但得到了“无更改”或排序错误消息。但是将 RemoveExistingProducts 放在那个确切的位置似乎可以做到!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    相关资源
    最近更新 更多