创建本地化的 WIX 3.6 引导程序。

问题描述 投票:0回答:3

一年多前,我在 Visual Studio 2010 中创建了一个 WIX 项目。 它创建一个 MSI 文件和一个引导程序 setup.exe。 实际上,它为两种语言(英语和法语)创建了一对文件。 我刚刚将该项目集成到我们的 TFS CI 构建中。 我在获取 CI 构建来生成引导程序 setup.exe 文件时遇到问题。

我们最近将所有构建服务器上的 Wix 升级到 Wix 3.6 RC。 所以,我想我应该尝试一下 Burn,而不是使用旧式的引导程序。 我在我的解决方案中添加了一个新的 Bootstrapper 项目。 引导程序项目包含一个简单的bundle.wxs,它仅加载由我的旧MSI 项目生成的MSI。 但是,当我尝试构建时,出现以下错误:

错误LGHT0103:系统找不到该文件 'C:\Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix in\Release r-fr\LaunchPad.msi;C:\Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix in\Release n-us\LaunchPad.msi'.

我在捆绑包中的包参考如下所示:

<MsiPackage Id="MyApplication" SourceFile="$(var.LaunchPad.Wix.TargetPath)" />

LaunchPad.Wix 是 Wix MSI 项目的名称。 如果我将 LaunchPad.Wix 项目更改为仅构建一种语言,那么它就可以正常工作。 在我看来,引导程序项目类型只是不支持构建多种语言的安装文件。 这是真的吗? 有什么解决方法的建议吗?

编辑

经过进一步调查,我想知道引导程序项目是否支持本地化。 我尝试将我的 Wix MSI 项目设置为仅创建 fr-fr。 我的引导程序项目用英语创建的 setup.exe。 当我编辑引导程序项目的项目属性时,“要构建的文化”字段被锁定并为空白。 我将如何构建一个非英语引导程序? 这可能吗?

visual-studio-2010 localization wix wix3.6 burn
3个回答
24
投票

这里发生了几件事:

  1. 如果您使用多种区域性,则无法在 MSBuild 之外需要单个文件名的内容中使用 TargetPath。正如您所发现的,TargetPath 是已构建的本地化文件的列表。但是,如果您限定 .msi 包的输出语言,则可以使用 TargetPath:

    <MsiPackage SourceFile="$(var.TestMsi.en-US.TargetPath)" Id="MsiEnUs" />

  2. 如果您想创建一个可以安装 en-US 和 fr-FR 之一/两者的引导程序,您需要在其自己的 MsiPackage 元素中单独列出每个 .msi 包。

  3. 如果您想创建两个引导程序,一个 en-US 和一个 fr-FR,您需要调用 bootstrapper .wixproj 两次,每种语言一次。引导程序不支持文化“技巧”——从一次 MSBuild 调用中生成两个输出是有问题的(见证 TargetPath 问题)。

如果您使用 WixStandardBootstrapperApplication,它会自动尝试根据用户 UI 语言本地化 UI,然后回退到系统 UI 语言,最后回退到英语。它会在以 LCID 命名的目录中查找本地化字符串,因此您将拥有如下所示的有效负载:

<Payload Name="1033\thm.wxl" SourceFile="..." />
<Payload Name="1036\thm.wxl" SourceFile="..." />

不幸的是,WixStandardBootstrapperApplication 字符串目前仅适用于 en-US。这就是 fr-FR 引导程序以英语显示 UI 的原因。您需要本地化 WiX 源文件 HyperlinkTheme.wxl 或 RtfTheme.wxl(取决于您使用的主题)。这两个文件都位于 src xt\BalExtension\wixstdba\Resources 中。


5
投票

好。 正如鲍勃·阿恩森所说,它的工作原理。

但一定要注意payload的名称和SourceFile。

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
      <Payload Name="2052\thm.wxl" SourceFile="2052\thm.wxl" />
</BootstrapperApplicationRef>

如果您将名称更改为其他名称。引导程序不会本地化。


0
投票

当我安装 Bootstrapper 时,上述答案有效。但是,每当我尝试卸载时,用户界面都是英文的。我可能做错了什么?源代码中 RtfTheme.wxl 定义的所有字符串及其翻译都在我的本地化文件中定义。事实上,如果我尝试从 .exe 运行引导程序,字符串将被正确翻译。

© www.soinside.com 2019 - 2024. All rights reserved.