代码之家  ›  专栏  ›  技术社区  ›  Stephen Reindl

在变换中包括组件

  •  0
  • Stephen Reindl  · 技术社区  · 7 年前

    我有一个包含以下结构的wix项目文件:

    cultures
    - en
      - profile.mo
    - de
      - profile.mo
    ...
    

    我正在创建几个包含本地化MSI字符串的MSI文件。

    我喜欢的是,“de”和其他语言的文件包含在特定的MSI文件中。

    这将大大减少设置的总体大小。目前我正在使用基于本地化的条件:

    <Component Id="compLangDePluginMo" Guid="{YOUR-GUID}" >
        <Condition><![CDATA["!(loc.Localization)" = "de-de"]]></Condition>
        <File Id="fLangDePluginMo" Name="plugin.mo" Source="$(var.ProjectRef.ProjectDir)catalogs\de\de.mo" />
    </Component>
    

    在每个WXL文件中都有这样一个语句

    <String Overridable="yes" Id="Localization">en-us</String>
    

    <String Overridable="yes" Id="Localization">de-de</String>
    

    缺点是所有MSI文件都包含所有特定于语言的文件。

    P、 MO文件只是一个例子。我们需要使用大约数MB的特定于语言的文件,因此不可能只在转换中包含消息。

    1 回复  |  直到 7 年前
        1
  •  2
  •   PhilDW    7 年前

    转换中不能有组件(因为文件需要放在文件表、CAB等中)。

    如果你有一个中立的MSI文件,这意味着你会有一个捆绑每种语言,中立的MSI的功能和语言特定的一个。因此,每种语言都可以有一个WiX捆绑包/引导程序:中立的MSI加上一种语言。

    为什么选择条件组件?在某些情况下,用户可以更改这些条件,而修复会改变组件的安装状态(有时这是一个功能,而不是一个bug)。作为功能的语言可能更容易预测。

    此外,一个单独的MSI用于所有特定于语言的数据也很有用,这样功能就可以更改,但语言MSI不需要重建,但不会减小大小,这似乎是问题所在。

    另一个注意事项:有时会使用合格的组件来提供此功能,例如,应用程序可以使用MsiProvideQualifiedComponentEx安装适当的语言文件,但我不确定如果您的产品不是多语言(但它是单语言)的话,它是否会对您有所帮助。

    如果您正在考虑变换,那么不妨全程查看补丁。您可以让没有语言的基本MSI和另一个包含(例如)de de更改的“相同”MSI(只要您小心使用组件),然后为基本MSI提供每种语言的补丁,根据系统应用补丁。一个包可以应用基础加上适当的补丁。此外,还可以将修补程序应用于管理安装,因此如果可以接受的话,您将有一个可安装的映像,但包含松散的文件。

    Chris对添加松散外部文件的转换提出了一个有趣的观点,但考虑到基本MSI所需的更改(标记混合文件、处理文件哈希等),还不清楚(至少对我来说)是否真的可能。