我正在使用 VS 2003 构建安装。安装有一个 Excel 工作簿和两个 Access 数据库。无论用户计算机上现有数据库的创建/修改日期如何,我都需要强制加载 Access 文件。我目前使用 ORCA 在两个文件上强制输入版本号,但想找到一个更简单、更优雅的解决方案(手动编辑 .msi 文件并不是我认为的“最佳实践”。
有没有办法使用 Access 将版本号添加到数据库中,然后在安装中使用?
我有更好的方法吗?
我正在使用 VS 2003 构建安装。安装有一个 Excel 工作簿和两个 Access 数据库。无论用户计算机上现有数据库的创建/修改日期如何,我都需要强制加载 Access 文件。我目前使用 ORCA 在两个文件上强制输入版本号,但想找到一个更简单、更优雅的解决方案(手动编辑 .msi 文件并不是我认为的“最佳实践”。
有没有办法使用 Access 将版本号添加到数据库中,然后在安装中使用?
我有更好的方法吗?
@LanceSc
我不认为 MsiFileHash 表在这里会有所帮助。请参阅 Aaron Stebner 的这篇出色的文章。客户端计算机上 Access 数据库的最后修改日期很可能与其创建日期不同。Windows Installer 将正确假定该文件自安装以来已更改并且不会替换它。
解决这个问题的正确方法(正如问题作者指出的那样)是在 File 表中设置 Version 字段。
不幸的是,Visual Studio 中的设置项目非常有限。您可以创建简单的 VBS 脚本来修改 File 表中的记录(使用 SQL),但我建议改用其他设置创作工具,例如WiX、InstallShield 或 Wise。我认为 WiX 是最好的。
由于听起来您没有正确版本化的资源,您是否尝试过更改 REINSTALLMODE 属性?
IIRC,在“omus”的默认值中,它是“o”标志,只有在您有旧版本时才允许您安装。您可以尝试将其从“o”更改为“e”。请注意,这将覆盖丢失的、较旧且版本相同的文件。
手动添加版本是错误的开始方式,但这应该确保您不必手动增加版本号来安装它们。
查看项目的构建事件。在构建事件期间可能会修改文件的版本。[只是不要引用我的话]。我不确定你是否可以,但这将是我首先开始调查的地方。
您应该为这些文件填充MsiFileHash表。查看 WiFilVer.vbs ,它是 Microsoft Platform SDK 的一部分,以了解如何执行此操作。
我的另一个建议是使用WiX而不是 Visual Studio 2003 进行安装。Visual Studio 2003 对 MSI 的支持非常有限,最终您可能会花费大量时间与之抗争,而不是获得有用的工作。