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

Mat*_*low 14 localization wix visual-studio-2010 burn wix3.6

我在一年多前在Visual Studio 2010中创建了一个WIX项目.它创建一个MSI文件和一个bootstrapper setup.exe.实际上,它为两种语言创建了一对文件 - 英语和法语.我现在正在将此项目集成到我们的TFS CI构建中.我无法通过CI构建来生成bootstrapper setup.exe文件.

我们最近将所有构建服务器上的Wix升级到Wix 3.6 RC.所以,我以为我会尝试Burn,而不是使用旧式的bootstrapper.我在我的解决方案中添加了一个新的Bootstrapper项目.bootstrapper项目包含一个简单的bundle.wxs,它只加载我的旧MSI项目生成的MSI.但是,当我尝试构建时,我收到以下错误:

错误LGHT0103:系统找不到文件'C:\ Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix\bin\Release\fr-fr\LaunchPad.msi; C:\ Tf\Advantage\Dev\Solution \配置\ LaunchPad.Wix\BIN \发布\ EN-US\LaunchPad.msi".

我在bundle中的包引用如下所示:

<MsiPackage Id="MyApplication" SourceFile="$(var.LaunchPad.Wix.TargetPath)" />
Run Code Online (Sandbox Code Playgroud)

LaunchPad.Wix是Wix MSI项目的名称.如果我更改LaunchPad.Wix项目只构建一种语言,那么它工作正常.在我看来,bootstrapper项目类型不支持构建多种语言的安装文件.这是真的?有关解决方法的任何建议吗?

编辑

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

Bob*_*son 21

这里有几件事:

  1. 如果您使用多个Cultures,则不能在需要单个文件名的MSBuild之外的某些内容中使用TargetPath.如您所见,TargetPath是已构建的本地化文件的列表.但是,如果您符合.msi包的输出语言,则可以使用TargetPath:<MsiPackage SourceFile="$(var.TestMsi.en-US.TargetPath)" Id="MsiEnUs" />

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

  3. 如果你想创建两个bootstrappers,一个en-US和一个fr-FR,你需要两次调用bootstrapper .wixproj,每种语言一次.Bootstrappers不支持Cultures"技巧" - 从MSBuild的单个调用产生两个输出是有问题的(见证TargetPath问题).

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

<Payload Name="1033\thm.wxl" SourceFile="..." />
<Payload Name="1036\thm.wxl" SourceFile="..." />
Run Code Online (Sandbox Code Playgroud)

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