3

我使用 WiX 创建了一个多语言安装程序。我正在使用命令从命令行运行安装程序"msiexec /i myinstaller.msi TRANSFORMS=":1041",它工作正常。现在我使用引导程序创建了一个语言选择对话框。如何将所选语言传递给我的 WiX 安装程序以根据所选语言启动?我从以下链接中得到了这个想法:

  1. 我们可以在运行时使用语言选择 UI 本地化 WIX msi 和捆绑吗?
  2. http://wix.tramontana.co.hu/tutorial/transforms/morphing-installers

我的包有<MsiPackage SourceFile="myinstaller.msi" DisplayInternalUI="yes" >

由于我使用来自 WiX 工具集的刻录的自定义 UI,我有这个屏幕:

在此处输入图像描述

msiexec /i myinstaller.msi TRANSFORMS=":1041"如果我选择日语或msiexec /i myinstaller.msi TRANSFORMS=":1031"选择德语并按确定,我想以某种方式执行命令。

请告诉我我应该为这个问题做些什么。有没有其他方法可以做到这一点?如果是,请告诉我。一些代码示例将是一个更好的帮助。

4

2 回答 2

5

不幸的是,必须在打开 MSI 时应用转换。这意味着,您需要预先使用引导程序将适当的命令行传递给 Windows 安装程序以应用正确的转换。

在引导程序中获取 UI 以询问用户要显示什么语言(组合框或其他内容?)后,我可能只是做一个ShellExecute()并格式化命令行参数,例如:

("/i myinstaller.msi TRANSFORMS=\":%d\", dwLanguageIdFromComboBox)

这将使用正确的 UI 启动安装程序,并且您的引导程序可以消失。

于 2013-05-07T16:43:43.057 回答
5

最后我得到了解决方案。可以按照此处所述创建用于语言选择的引导程序 UI 。之后,我在按钮单击事件中编写了以下代码,以选择语言启动 msi:

Bootstrapper.Engine.StringVariables["CommandArgs"] = ":1031";
Bootstrapper.Engine.Plan(Wix.LaunchAction.Install);
break;
....
....
this.Close(); //outside of switch statement
break;

上面的代码将使用 CommandArgs 作为 MSI 属性。然后我将以下代码添加到我的 bundle.wxs 文件中

<MsiPackage Id="mypackage" SourceFile="myinstaller.msi" DisplayInternalUI="yes">
   <MsiProperty Name="TRANSFORMS" Value="[CommandArgs]"/>
</MsiPackage>

以我想要的方式工作。此代码与使用以下命令从命令行启动 msi 相同

msiexec /i myinstaller.msi TRANSFORMS=":1031"

唯一的问题是从上面的 UI 中选择语言后启动 MSI 需要一些时间。

于 2013-05-28T09:33:53.943 回答