izpack,一个开源的安装制作工具, Java编写。做出来的东西基本上中规中矩。
使用中碰到不少中文问题,一一解决如下:
1. 中文界面乱码:
修改chn.xml, 这个文件的编码被很奇怪的转码了,试验了半天才搞定。编辑scrapbook page, 评估如下代码:
byte[] a = new byte[(int)f.length()];
new java.io.DataInputStream(new java.io.FileInputStream(f)).readFully(a);
new String(new String(new String(a,"GBK").getBytes(),"UTF-8").getBytes("ISO8859-1"))
碰到这种乱码问题可以使用暴力破解,一般转码不会超过三重,以后类似问题可以采用:
"UTF-8", "UNICODE" };
public static void main(String[] args) throws UnsupportedEncodingException {
String input = "脨露脭脴";
for (int i = 0; i < encodings.length; i++) {
for (int j = 0; j < encodings.length; j++) {
for (int k = 0; k < encodings.length; k++) {
System.out.println(new String(new String(input
.getBytes(encodings[i]), encodings[j])
.getBytes(encodings[k]))
+ "\t"
+ encodings[i]
+ "/"
+ encodings[j]
+ "/"
+ encodings[k]);
}
}
}
}
2. 安装后菜单不出来。
在document and settings\%your account%\下面能看到一个乱码的目录,所以开始菜单上不会出来,桌面上不出来也是这个原因。
原因:ShortLink.dll中没用unicode, 所以中文读出来是GBK,被错误当成ISO8859-1转码了。
解决:尝试在ShortLink.java中取到的乱码字符串重新getBytes后组合,发现有字符丢失,看样转换中有损耗。
最后决定用byte[]传递字符串,在dll中读到的中文按照字节数组传递给Java, Java根据系统属性io.encoding(GBK)编码得到字符串。
折腾了两天终于成功安装了~~~,但是。。。卸载界面还有中文问题。。。faint, 有空再搞吧,小问题了。
碰到的几个小tip:
1. 菜单配置shortcutSpec.xml文件中如果<createForPack name="xxx"/>指定的xxx不存在,不会报错,菜单也不会安装。
2. 如果执行的文件不存在,菜单创建画面会很慢。ShortcutPanel要放到文件好之后执行。
3. 制作安装时如果文件不存在,没有出错提示,屏幕上最后出现的文件名应该就是有问题的。
这里下载提到的补丁文件:https://files.cnblogs.com/steeven/izpack3.7.2_chiese_patch.zip