我有一个Visual Studio安装项目,其中包括项目中的.SQL文件,如果我在同一台计算机上运行安装程序以更新到新版本,则该文件应始终覆盖现有文件。问题是似乎并不总是会发生。在File System > Application Folder > File Installation Properties
下,哪个属性会告诉安装程序在安装时始终覆盖现有的.SQL文件?
答案 0 :(得分:0)
升级是在较旧文件之上安装新文件,在此过程中,将遵循文件覆盖规则。数据文件的规则是,自安装以来对其进行更新,将不会覆盖它们。如果您安装的数据库现在已经充满了客户数据,那么将其替换为新的空数据库通常是个坏主意:
https://docs.microsoft.com/en-us/windows/desktop/msi/neither-file-has-a-version
解决问题的方法有:
使用自定义操作用新数据更新现有文件。
首先通过将已安装的文件复制到应用程序可以使用,更新等的位置来避免该问题。然后可以通过升级覆盖原始副本,并且应用程序检测到有新的副本要使用,可以复制该副本以替换先前的副本。对此可能为时已晚。
让应用程序使文件的创建日期和修改日期具有相同的值,以便升级将认为未更新。
将新文件安装到其他位置(从现在开始使用1.)。较旧的文件将通过升级删除。
编辑MSI文件(使用Orca之类的工具)以移动RemovePreviousVersions的位置(在InstallExecuteSequence中),以便它在InstallInitialize之后立即出现。这将在安装新文件之前完全删除所有旧文件,因此如果您的数据库中包含开头段落中提到的客户数据,则无济于事。