Gee*_*orp 5 xml installation windows-installer wix
我们已经使用 WIX 创建了一个 MSI。当我们使用新的 MSI(使用新版本)更新软件时,我们希望使用较新的文件创建日期覆盖 dll,并且我们希望保留某些 userconfig xml 文件。
我们已经应用的 wix 配置:
<RemoveExistingProducts After="InstallFinalize" /> 设置后删除文件。<Component NeverOverwrite="yes"> 强制安装程序不覆盖某些文件。<File DefaultVersion="2.0.0.0" /> 强制安装程序覆盖某些文件。我们通过应用上述 1 和 2 设法使安装程序强制文件不被覆盖。我们如何设法使安装程序强制文件被覆盖?以上 3 个选项不能为我们解决问题。
谢谢您的回答!
Windows Installer(或其修补程序、服务包或其他任何内容)中没有内置的“覆盖文件,因为它们是较新的日期”功能。这些规则基于文件版本 - 较高版本覆盖较低版本 - 因此,最好的长期解决方案是让您拥有文件版本,并在构建更改的二进制文件时增加它们。然后一切就正常了。数据文件也是如此。如果它们在初始安装后被更改,则不会被替换。我所知道的每个 MSI 安装都利用了这两个规则,因为这样它就可以正常工作了。
https://msdn.microsoft.com/en-us/library/aa367835(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/aa370531(v=vs.85).aspx
因此,您正在发明自己的版本控制/覆盖方案。
如果二进制文件确实有版本,那么 WiX 将在构建时使用它,尽管存在 DefaultVersion(有一个您没有提到的抑制文件选项),并且 Windows 将在安装时使用它,因此如果您的文件已版本化,则版本规则将会被使用。如果二进制文件根本没有文件版本,那么它们将被视为数据文件,因此在这种情况下,您应该告诉 WiX 使用文件哈希机制,因为如果传入的文件哈希为与安装的文件不同:
https://msdn.microsoft.com/en-us/library/aa370532(v=vs.85).aspx
因此,如果 3) 是您唯一的问题,请在没有文件版本的情况下使用文件哈希,否则谎报文件版本是不安全的。如果您正在安装的文件的实际版本是 1.0.0,并且磁盘上的文件也是 1.0.0,并且您撒谎说传入的版本是 2.0.0,那么您将面临磁盘上的文件为1.0.0,MSI 文件表中的版本为 2.0.0。换句话说,Windows Installer 可能会注意到已安装的产品已损坏(根据文件表,磁盘上存在错误版本的文件),并且可能会尝试使用其恢复功能来修复它。正如这里所说,“正确填充...文件表中的版本...”:
http://blogs.msdn.com/b/heaths/archive/2005/12/02/499495.aspx
因为如果原始源 MSI 文件与磁盘上的文件不匹配,您可能会看到提示。
所以你在 3) 方面的处境并不好,因为版本谎言不是一个解决方案,但如果你的二进制文件中根本没有版本,文件哈希就可以工作。一般来说,您确实应该使用 Windows 提供的覆盖规则,而不是创建您自己的规则。如果您要这样做,则 1) 较高的二进制版本会覆盖较低的版本,2) 自安装以来更新的文件不会被覆盖。使用这些规则将是更好的方法。
| 归档时间: |
|
| 查看次数: |
7617 次 |
| 最近记录: |