Visual Studio 2010 安装项目:即使文件已更改也要覆盖?

Visual Studio 2010 Setup Project: Overwrite a file even if it has changed?

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

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

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

有什么我可以做的——在 Visual Studio 中,使用 Orca 或其他方式——强制覆盖文件,即使它已经改变了?

更新: 在 Orca 中,我注意到 "File" table 包含一个 "FileSize" 列。我相信这可能是该文件被忽略的原因。如果文件大小发生变化,则不匹配。有什么方法可以覆盖它吗?

您无法安全地更改 Windows 安装程序替换规则,但您遇到这种情况是因为升级机制首先在旧产品之上安装升级(调用文件替换规则)然后卸载旧产品,参考倒计时并移除产品。 "on top" 才是问题所在。如果将 InstallExecuteSequence 中的 RemoveExistingProducts 从 InstallFinalize 之前移动到 InstallInitialize 之后,您将完全卸载旧产品,然后安装新升级。如果您希望保留数据文件,那可能行不通。

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