安装时检查文件版本
Check file-version at install time
我有一个包含未压缩文件的安装程序:
<Component Id="Uncompressed">
<File Id="UncompressedFile" Vital="yes" Source="Uncompressed.dll" Compressed="no" />
</Component>
可以在实际安装包之前替换此文件。这意味着,构建时的版本号与安装时的版本号不同。不过,MSI 始终包含构建时的版本。因此文件没有得到更新。
我有什么可能性:
- 安装时检查文件版本(理想)
- 忽略此文件的文件版本(如果 1. 不可能)
我可以创建安装程序而无需在构建时实际提供文件吗?
在 this related question 中有一些可能的解决方法:
- 使用
REINSTALLMODE=amus
=> 我更喜欢只影响这个单个文件的解决方案。
- 安装时重命名文件(回滚时撤消)
=> 可能有用,虽然看起来很老套
- 配套文件
=> 似乎是目前最好的解决方案
- 版本撒谎
=> 不起作用,因为文件是一个 DLL,实际上包含一个版本
- This article看来正是我想要的
=> 我只是不确定如何使用它。
您的流程不够理想。如果 MSI 文件 table 包含的版本与您实际安装的文件不同,则可能会出现几个问题。如果磁盘上的文件版本与 MSI 中的版本不匹配,则存在修复问题的范围,尝试更正损坏的安装。当有重大升级(或补丁)时 Windows 会看到版本不匹配,并且不知道磁盘上的文件是否应该在升级中用新文件替换,因为它无法进行正确的版本比较.
我不会试图延续这种情况。最简单的修复方法是 运行 msifiler.exe(来自 Windows SDK)以在替换文件时修复 MSI 文件 table 版本。
我有一个包含未压缩文件的安装程序:
<Component Id="Uncompressed">
<File Id="UncompressedFile" Vital="yes" Source="Uncompressed.dll" Compressed="no" />
</Component>
可以在实际安装包之前替换此文件。这意味着,构建时的版本号与安装时的版本号不同。不过,MSI 始终包含构建时的版本。因此文件没有得到更新。
我有什么可能性:
- 安装时检查文件版本(理想)
- 忽略此文件的文件版本(如果 1. 不可能)
我可以创建安装程序而无需在构建时实际提供文件吗?
在 this related question 中有一些可能的解决方法:
- 使用
REINSTALLMODE=amus
=> 我更喜欢只影响这个单个文件的解决方案。 - 安装时重命名文件(回滚时撤消)
=> 可能有用,虽然看起来很老套 - 配套文件
=> 似乎是目前最好的解决方案 - 版本撒谎
=> 不起作用,因为文件是一个 DLL,实际上包含一个版本 - This article看来正是我想要的
=> 我只是不确定如何使用它。
您的流程不够理想。如果 MSI 文件 table 包含的版本与您实际安装的文件不同,则可能会出现几个问题。如果磁盘上的文件版本与 MSI 中的版本不匹配,则存在修复问题的范围,尝试更正损坏的安装。当有重大升级(或补丁)时 Windows 会看到版本不匹配,并且不知道磁盘上的文件是否应该在升级中用新文件替换,因为它无法进行正确的版本比较.
我不会试图延续这种情况。最简单的修复方法是 运行 msifiler.exe(来自 Windows SDK)以在替换文件时修复 MSI 文件 table 版本。