我使用WiX创建了一个多语言安装程序。我正在使用命令"msiexec /i myinstaller.msi TRANSFORMS=":1041"
从命令行运行安装程序,它运行正常。
现在我使用bootstrapper创建了一个语言选择对话框。如何将所选语言传递到我的WiX安装程序以按所选语言启动?我从以下链接中得到了这个想法:
我的论坛有<MsiPackage SourceFile="myinstaller.msi" DisplayInternalUI="yes" >
由于我的自定义用户界面使用Burn from WiX工具集,我有这个屏幕:
如果我选择日语,我想以某种方式执行命令msiexec /i myinstaller.msi TRANSFORMS=":1041"
或如果我选择德语则按msiexec /i myinstaller.msi TRANSFORMS=":1031"
并按OK。
请告诉我该怎么做才能解决这个问题。有没有其他方法可以做到这一点?如果是的话,请告诉我。一些代码示例将是一个更好的帮助。
答案 0 :(得分:5)
不幸的是,必须在打开MSI时应用转换。这意味着,您需要预先使用该引导程序将适当的命令行传递给Windows Installer以应用正确的转换。
在引导程序中获取UI以询问用户要显示的语言(组合框或其他什么?)我可能只需执行ShellExecute()
并格式化命令行参数,如:
("/i myinstaller.msi TRANSFORMS=\":%d\", dwLanguageIdFromComboBox)
这将使用正确的UI启动安装程序,您的引导程序可能会消失。
答案 1 :(得分:5)
最后我得到了解决方案。可以按照here所述创建用于语言选择的Bootstrapper 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。