1

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

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

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

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

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

4

1 回答 1

2

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

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

于 2016-06-14T17:29:51.860 回答