使用不同语系在起始安装出现乱码

来源:互联网 发布:200入门耳机推荐 知乎 编辑:程序博客网 时间:2024/06/05 07:48

这个状况是有针对性的,所以请注意图片,此问题也会发生在 VS2008 ,只是用 VS2005 为范本来说。

主要的问题是你用的编译程序语系与你开发的语系不同,例如用繁中版开发英文版软件,大部分的状况都能正确显示英文,但却会发生当你安装你的软件在没有指定必要系统组件时,在散布免责声明 (EULA) 时发生乱码,例如没有 .Net framework 2.0 时,如下图。 

 使用不同语系在起始安装出现乱码 - Leon - 欲寄彩笺无尺素

 这个问题是由 setup.exe 产生的,直接执行 setup.msi 则不会有此问题,如下图。

 使用不同语系在起始安装出现乱码 - Leon - 欲寄彩笺无尺素

探究此问题的成因是,setup.exe 是由下面数个部分组成:

1. 基底二进制文件,$(BootStrapper)/Engine/setup.bin

2. 语系资源,$(BootStrapper)/Engine/$(lang)/setup.xml

3. 产品信息,$(BootStrapper)/Packages/$(Product)/product.xml

4. 封装信息,$(BootStrapper)/Packages/$(Product)/$(lang)/package.xml

5. 散布授权免责声明,$(BootStrapper)/Packages/$(Product)/$(lang)/eula.txt

 

其中 $(BootStrapper):

VS2005: C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/BootStrapper

VS2008: C:/Program Files/Microsoft SDKs/Windows/v6.0A/Bootstrapper

 

因此要解决乱码的问题很单纯,把:

$(BootStrapper)/Packages/DotNetFX/zh-CHT/eula.txt

换成英文版的 eula.txt 即可。

 

英文版的 eula.txt 哪里来?将:

$(BootStrapper)/Packages/DotNetFX/dotnetfx.exe

用 WinRAR 解压缩后,可得到各语系版本的 eula.langid.txt ,比较中文版 eula.1028.txt 与 eula.txt 的差异,只有差在少第三、四行,且 eula.txt 使用 UTF-8 格式,eula.1028.txt 使用 Unicode 格式:

MICROSOFT WINDOWS INSTALLER 2.0

MICROSOFT WINDOWS INSTALLER 3.1

跟最后少个句号,所以我们把英文版的 eula.1033.txt 插入三、四行,另存成 UTF-8 格式,并取代:

$(BootStrapper)/Packages/DotNetFX/zh-CHT/eula.txt

 

重新编译后可得下图:

 使用不同语系在起始安装出现乱码 - Leon - 欲寄彩笺无尺素

即可解决乱码问题。如果是其他语系或必要系统组件,也可依此方式修改。我找过微软没提供不同语系版本的 eula.txt 可下载,如果你真的要完全一字不错,你可能要安装不同版本的 Visual Studio 来取得,我自己选择从 .Net framework 2.0 Runtime 里面的 eula 来改。

 

另外考虑到经常性的需求,我是建议保存原始的 eula.txt ,更名为 eula.1028.txt ,等到需要哪个语系的 eula.txt 时,直接复制一个来取代 eula.txt 即可,如下图。

 使用不同语系在起始安装出现乱码 - Leon - 欲寄彩笺无尺素

标准的封装部署项目,只能用此方法来处理,ClickOnce 项目可自定义 xml 的设定,指定 eula.txt ,会比这个方法简单,不需要动到软件源目录,可依需求选用。

 

参考信息:

http://msdn.microsoft.com/zh-tw/library/aa730839(en-us).aspx

http://msdn.microsoft.com/en-us/magazine/cc163899.aspx

 

下载参考:

我自制的 eula.1033.txt (压缩成 ZIP)

原创粉丝点击