在安装时检查文件版本

时间:2016-01-25 15:08:03

标签: wix windows-installer

我有一个包含未压缩文件的安装程序:

<Component Id="Uncompressed">
    <File Id="UncompressedFile" Vital="yes" Source="Uncompressed.dll" Compressed="no" />
</Component>

在实际安装Package之前,可以替换此文件。这意味着,构建时的版本号与安装时的版本号不同。 MSI始终包含构建时的版本。因此,文件不会更新。

我有什么可能性:

  1. 在安装时检查文件版本(理想)
  2. 忽略此文件的文件版本(如果不可能)
  3. 我是否可以在构建时没有实际提供文件的情况下创建安装程序?

    this related question中,有一些可能的解决方法:

    • 使用REINSTALLMODE=amus
      =&GT;我更喜欢只影响这个单一文件的解决方案。
    • 安装时重命名文件(并在回滚时撤消)
      =&GT;可能工作,但看起来很hacky
    • 同伴文件
      =&GT;现在似乎是最好的解决方案
    • 版本说谎 =&GT;无法工作,因为File是一个实际包含版本的DLL
    • This article似乎正是我想要的 =&GT;我只是不确定如何使用它。

1 个答案:

答案 0 :(得分:3)

您的流程不是最佳的。如果MSI的文件表包含的版本与您实际安装的文件不同,则可能存在多个问题。如果磁盘上的文件版本永远不会与MSI中的版本匹配,则存在修复问题的余地,尝试更正损坏的安装。当存在重大升级(或补丁)时,Windows将看到版本不匹配,并且不知道磁盘上的文件是否应该替换为升级中的新文件,因为它无法进行正确的版本比较。

我不会试图使这种情况永久化。最简单的解决方法是在替换文件时运行msifiler.exe(来自Windows SDK)来修复MSI File表版本。