在变换中包含组件

时间:2018-02-09 15:06:54

标签: wix windows-installer

我有一个包含以下结构的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.S。 MO文件只是一个例子。我们正在处理大约几MB语言特定文件,因此没有机会将这些消息包含在转换中。

1 个答案:

答案 0 :(得分:2)

您无法在转换中使用组件(因为文件需要放在File表中,CAB中等等)。

如果您有一个中性的MSI文件,这意味着您的每种语言都有一个捆绑包,那么中性MSI具有功能和特定语言的一个。因此,每种语言都可以使用WiX软件包/ bootstrapper:中性MSI加一种语言。

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

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

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

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

Chris对转换添加松散的外部文件提出了一个有趣的观点,但是对于基本MSI所需的更改(标记混合文件,处理文件哈希等等)实际上是否可能实际可行(至少对我而言)并不清楚。