【问题标题】:Overwrite pre-msi files in WiX覆盖 WiX 中的 pre-msi 文件
【发布时间】:2020-07-02 02:24:21
【问题描述】:

我有一个制作 msi 的 WiX 项目,它取代了由一组解压 zip 文件的脚本制作的旧版安装。

我想指定 msi 中的某些文件必须强制覆盖旧安装中已经存在的非版本控制文件。稍后它不会是 pb,因为 msi 到 msi 更新将是升级。

是否可以基于每个文件指定 msi 必须覆盖旧的非 msi 安装文件?

【问题讨论】:

  • 安装到新的安装文件夹会更方便吗?
  • @SteinÅsmul 否。它已经在许多文件夹中安装,其中一些包含无法更改文件夹的旧组件。整个想法是(部分)替换一个非常复杂且容易出错的旧程序,以获得更可控的东西。这已经是成功的了。现在最常更改的组件是 msi,它大大减少了准备更新的时间和安装错误的数量。

标签: wix windows-installer


【解决方案1】:

我会为你添加一些链接和摘要。

是的,您可以通过多种方式覆盖单个文件,甚至可以 强制降级文件设置范围,但后者非常危险 要做 (information on dangers in section 4 here)。

确保覆盖:此答案描述了始终覆盖文件的各种措施:Ensure file overwriting - 以 WiX 为例。 Here is an alternative answer.

  • 我建议使用伴随文件。
  • 我有时会自己破解文件版本 - 只是为了让事情顺利进行。
  • 我更喜欢移动或重命名文件以“解决问题”。

有关上述“选项”的更多信息,请参见上述链接。


更多信息

【讨论】:

  • 我不确定这是我的问题的答案。我的要求很简单。在第一次安装 msi 期间,我要安装到的文件夹中已经有文件。这些文件不是来自 msi,它们是之前手动复制的。我只是希望它们被覆盖。我不关心他们的版本(其中一些是 10 年前的古老 dll,哪些版本?),我只想物理覆盖它们而不是让我的安装失败。安装 msi 后,升级将以“文明”的方式进行,我已经这样做了,但看不到 pb。
  • file overwriting rules 对于 MSI 来说非常复杂。请检查该链接以了解它们的工作原理。上面的其余链接描述了真实场景。
  • 阅读这篇文章我会说我需要“Versioned Files Win”规则。
  • 这些规则通常是为了防止 DLL-hell 的降级共享文件。我们可能需要的是在您的应用程序“拥有”的文件夹中强制覆盖文件的权利——换句话说,它自己的安装文件夹——而在共享文件夹中不允许这种行为。这是为了防止在系统范围内降级共享文件,但让您可以完全控制自己的文件。但是,可以在您自己的应用程序之间共享文件夹 - 因此您可能会通过在较新的软件包之后安装较旧的软件包来让一个软件包不合意地降级共享文件。
  • 我们现在也有了并行组件的概念。 WinSxS 用于 Win32 文件,GAC 用于 .NET 文件。也不是没有问题。在这里,您可以绑定到您需要的共享文件的版本 - 因此您可以为 1.x.x 版本和 2.x.x 版本创建一个分支,这两个版本都使用向后兼容性。 “可爱的故事”就像我经常说的,当理论上事情很好的时候。 “理论上应该没有实践和理论的区别,但实际上是有的”。 DLL-hell 的第二次到来,因为您的应用程序错误地绑定了两个分支并且存在安全漏洞?
猜你喜欢
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多