使用Wix与MSI安装程序的本地化作斗争

时间:2013-07-12 02:09:28

标签: wix windows-installer

我正在尝试设置使用Wix开发的MSI安装程序以支持多语言UI,因此我创建了Strings_en-us.wxl文件来包含此内容:

<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization">
  <String Id="Language">1033</String>
  <String Id="Codepage">1252</String>
  <String Id="DowngradeErrorMessage">A newer version of [ProductName] is already installed.</String>
</WixLocalization>

然后从Product.wxs文件:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="$(var.ProduceCode)"
           Name="TestSetupProject1"
           Version="$(var.Version)"
           Language="!(loc.Language)" 
           Codepage="!(loc.Codepage)"
           Manufacturer="$(var.CompanyName)" 
           UpgradeCode="$(var.UpgradeCode)">

我立即收到错误:

  

错误CNDL0276:代码页'!(loc.Codepage)'不是有效的Windows   代码页。请检查您的产品/ @代码页属性值   源文件。

那我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

由于缺乏任何答复,我将得出结论认为这是不可能的。

我不确定这是微软的错误还是Wix解析器中的一些遗漏?执行此操作的唯一方法是将代码页编号硬编码到.wxs文件本身,这非常不方便,因为在重新编译其他语言时必须将其切换为适当的代码页编号。除此之外,最近谁在使用代码页呢?

PS。为了一劳永逸地修复它,我尝试这样做(就像它应该从一开始就完成):

Codepage="UTF-8"

它已编译但生成的MSI文件的UI如下所示:)

enter image description here

答案 1 :(得分:0)

扩展元素WixLocalization的属性@Codepage会覆盖指定的Product/@Codepage。从链接页面:

  

结果数据库的代码页整数值或Web名称。您也可以指定-1,它不会重置数据库代码页。

同样相关,如果问题中没有直接提及,本地化字符串会出现在最终的MSI中有两个不同的地方:在摘要信息流和安装程序数据库中。有关详细信息,请参阅MSI Databases and Code Pages。 SIS的代码页由属性Package/@SummaryCodepage指定,您可以在其中使用!(loc)变量。