Wix v5引导程序本地化Bug:卸载/修改界面无法自动切换语言
Wix v5引导程序卸载界面语言不匹配问题解决
问题根源
直接运行引导程序时,Wix标准BA能自动识别系统语言并加载对应thm.wxl翻译文件;但通过「应用和功能」或控制面板卸载时,Windows会调用注册的卸载命令启动引导程序,此时BA的语言检测逻辑未触发,或者翻译文件的路径无法被正确读取,导致默认回退到英文界面。
解决办法
1. 确保翻译文件被部署到卸载缓存目录
卸载时引导程序会从Windows Installer的缓存目录读取资源,需要把thm.wxl文件作为Bundle级别的Payload(而非仅BootstrapperApplication的子Payload),保证卸载时能访问到:
<Bundle> <!-- 其他原有配置 --> <!-- 将翻译文件作为Bundle的Payload --> <Payload Name="2058\thm.wxl" SourceFile="2058\thm.wxl" /> <Payload Name="3084\thm.wxl" SourceFile="3084\thm.wxl" /> <BootstrapperApplication> <bal:WixStandardBootstrapperApplication Theme="rtfLicense"/> <!-- 这里的BA子Payload可以保留,也可以合并到Bundle的Payload中 --> </BootstrapperApplication> </Bundle>
2. 配置Bundle本地化支持
在Bundle中显式声明支持的语言,让标准BA在卸载场景下也能识别系统语言:
<Bundle> <!-- 声明各语言的本地化文件 --> <Localization Culture="en-US" SourceFile="en-US\thm.wxl" /> <Localization Culture="es-MX" SourceFile="2058\thm.wxl" /> <!-- 2058对应西班牙语(墨西哥) --> <Localization Culture="fr-CA" SourceFile="3084\thm.wxl" /> <!-- 3084对应法语(加拿大) --> <!-- 其他原有配置 --> </Bundle>
3. 给卸载命令添加语言参数
Windows默认的卸载命令不带语言参数,需要手动在注册表卸载项中添加/lang参数,传递系统语言ID给引导程序:
<Bundle> <!-- 其他原有配置 --> <RegistryValue Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[WixBundleManufacturer]_[WixBundleName]" Name="UninstallString" Value="[System64Folder]msiexec.exe /x [WixBundleOriginalSource] /lang [SystemLanguageId]" Type="string" /> </Bundle>
4. 验证缓存文件是否存在
安装完成后,检查C:\ProgramData\Package Cache\<你的Bundle GUID>目录下,是否存在2058和3084文件夹及对应的thm.wxl文件。如果没有,说明Payload配置有误,需重新调整Bundle的Payload设置。
内容的提问来源于stack exchange,提问作者bsbllshrtstp
相关产品推荐
相关产品推荐

