利用heat.exe并收集已经本地化的文件名,并使用wix将它们包含到msi中

时间:2012-08-28 23:20:06

标签: wix windows-installer heat

我有一个问题,我正在尝试做的是否可行,如果答案是肯定的,该怎么做。

我是wix的新手,并且一直在阅读如何动态地将文件夹包含到安装程序中,最终我能够在nant中执行任务,使用heat.exe生成wxs文件,后者添加新生成的wxs文件到灯光和蜡烛任务。这允许我将文件夹的内容添加到msi,然后将该文件夹及其内容安装。

我的问题从我添加到msi的文件夹包含其名称已经本地化的文件开始(这是一项要求)。

当我将文件添加到名称为俄语的目录结构中时,例如,这不是1252代码页,我收到错误:

  

[exec] ...... Templates.wxs(65):错误LGHT0311:字符串是   提供指定中不可用的字符   数据库代码页'1252'。将这些字符更改为那些字符   存在于数据库的代码页中,或更新数据库的代码页   通过修改以下属性之一:Product / @ Codepage,   Module / @ Codepage,Patch / @ Codepage,PatchCreation / @ Codepage,或   WixLocalization / @代码页。

我尝试将Product/@Codepage设置为65001(UTF-8),但这并没有解决问题。

最终我想要做的是能够将文件夹及其内容添加到安装程序,而其他人则添加任意数量的文件,这些文件的名称已本地化到该文件夹​​中。这样,无论何时构建运行并随后创建msi,msi都将包含该文件夹及其内容。

非常感谢你。

1 个答案:

答案 0 :(得分:4)

这就是WiX.chm关于设置MSI数据库代码页的说法:

  

您可以按1252之类的整数将其设置为有效的Windows代码页,或者   通过网络名称,如Windows-1252。 UTF-7和UTF-8不是正式的   由于用户界面问题而受支持。不支持Unicode。

只要您要使用不同语言命名的文件,即File表不适合单个Windows代码页,您就没有多少选择。据说UTF-8没有得到官方支持,这留下了希望的地方。

如果您将CodePage元素的Product属性设置为UTF-8,则会成功构建。您可以毫无问题地安装/卸载生成的MSI。我已经玩了一些,并没有面对上面那个警告中提到的任何“界面问题”。

此外,我已经搜索了一下这个主题,并发现InstallShield允许将MSI数据库代码页设置为UTF-8,which is reflected in their docs(在该页面上搜索“utf-8”)。他们对潜在的界面问题有更多的说法:

  

但是,某些情况会导致用户界面问题。例如,   如果最终用户指定/ qb命令行选项或卸载   来自“添加或删除程序”的产品,Windows Installer使用非常小   用于在UTF-8数据库中显示用户界面文本的字体。

他们也希望保持安全,因此默认情况下此设置为false(无UTF-8,仅为ASCII)。

所以,最后,在你的情况下我会怎么做?

  • 如果这是对安装包的严格要求,请使用UTF-8作为代码页
  • 测试与本地化相关的所有可能组合的所有可能方案(安装/卸载/修复/升级/等)(英语操作系统,非英语操作系统,当前文化和文化UI的各种组合)
  • 如果你面对那些幽灵“界面问题”,向你的利益相关者展示这些问题,决定这是否是你可以忍受的,如果你这样做就发布已知问题
  • 否则,回收这个想法,只是感谢你的生活有机会提升你在这方面的技能:)

希望这有帮助。