【问题标题】:One file per component or several files per component?每个组件一个文件还是每个组件多个文件?
【发布时间】:2010-12-08 20:07:26
【问题描述】:

我是否应该将要安装的所有文件包装在单个组件中? 将多个文件放在一个组件中有什么好处?

【问题讨论】:

  • 某些 .NET 程序集多文件,但应该包含在同一个 MSI 组件中,因为它们必须作为“原子单位”。换句话说,它们应该始终作为一个捆绑包一起安装和卸载。
  • 除了多文件 .NET 程序集外,我总是每个组件使用一个文件,因为它避免了各种升级和部署问题。

标签: wix windows-installer wix3


【解决方案1】:

“每个组件一个文件”的一个原因是resiliency。当应用程序启动时,Windows Installer 可以检查是否缺少任何组件的keypath。如果缺少密钥路径,则重新安装/修复组件。

如果一个组件有多个文件,那么只有一个文件可以是keypath。在 wix 中,您可以通过在 File 元素上设置 KeyPath=yes 来表明这一点。然后,其他文件将不会受到 Windows Installer 弹性的完全保护。只有在 keypath 文件丢失时才会重新安装它们。

“每个组件一个文件”的另一个原因是将文件安装到可能已经存在的位置(例如,应用程序升级,或安装到 c:\windows\system32)。 Windows 安装程序通过检查密钥路径来确定是否需要安装组件。如果 keypath 是一个文件并且该文件已经存在(具有相同或更高版本),则该组件安装。如果组件中的 other 文件确实需要安装/升级,那将是一个问题。

【讨论】:

  • 这是一个很好的答案,但没有说明为什么反过来有用。这是合理的,因为我只知道一个优点:您在安装过程中节省了一些注册时间,因为每个组件都已注册,但它的每个文件都没有。这通常不是一个好的权衡,因为它会扼杀弹性并阻碍升级,所以要多注意 wcoenen 的建议。
  • @Wim Coenen 当使用“每个组件的文件”方法时,应该将 KeyPath="yes" 放在文件上,但是它的组件呢?是否需要在 File 的父组件上添加相同的 KeyPath="yes"?此外,目录呢?目录(空和非空)的最佳做法是什么?这方面有很好的指导吗?谢谢!!!
  • @zam6ak:cmets 不是提出新问题的最佳场所,因为它们只得到有限的关注,并且无法提供全面的答案。请发布一个单独的问题而不是评论!
  • @Wim Coenen 点了!这是问题:stackoverflow.com/q/10358989/481904
  • 我不明白为什么 Wix 不隐式支持它 :((( 为什么我要编写所有这些样板文件,将每个文件都包含在一个单独的组件中。
【解决方案2】:

我遵循 InstallShield 也使用的 Microsoft 方法:http://msdn.microsoft.com/en-us/library/aa368269(VS.85).aspx

上面的链接给出了这种方法的优点。

相关部分是:

  1. 为每个 .exe、.dll 和 .ocx 文件定义一个新组件。将这些文件指定为其组件的关键路径文件。

【讨论】:

    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2012-04-03
    • 2021-12-19
    相关资源
    最近更新 更多