论坛风格切换切换到宽版
  • 5694阅读
  • 8回复

求助虎版,一个在繁体系统上显示乱码的问题 [复制链接]

上一主题 下一主题
离线373723699
 

发帖
38
金钱
380
威望
38
只看楼主 倒序阅读 0 发表于: 2014-10-25
虎版您好,求助一个问题。
我现在的安装包需要给台湾那边的同事进行安装,那边的电脑区域和语言设置是-繁体中文,如下图


然后我打开安装包,界面就是乱码



我安装包编译是在简体中文的系统上编译的。怎么应该如何设置?有没有让他自动识别的办法?
离线wanfu

发帖
2734
金钱
12170
威望
1217
只看该作者 1 发表于: 2014-10-25
用 Unicode 版的 Inno Setup 来制作安装程序,应该可以避免出现乱码问题。
离线373723699

发帖
38
金钱
380
威望
38
只看该作者 2 发表于: 2014-10-25
回 1楼(wanfu) 的帖子
wanfu:用 Unicode 版的 Inno Setup 来制作安装程序,应该可以避免出现乱码问题。 (2014-10-25 13:02) 

我用的是   InnoSetup Compiler version 5.4.2.e2(a)版本
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 3 发表于: 2014-10-25
version 5.4.2.e2 (a) 中的 a 表示是 ANSI 版本。如果是 (u) 则表示是 Unicode 版本。

你的问题有两个解决途径:
1) 制作多语言界面的安装程序,即:在简体中文系统下显示简体中文界面,在繁体中文系统下显示繁体中文界面,在其它语言系统下显示英文界面。
2) 用 Unicode 版本的 Inno Setup 制作单一的简体中文界面安装程序。这样的安装程序可以在任何语言系统下运行,不会乱码,界面当然只是简体中文。
方法2最简单,换成 Unicode 版本的 Inno Setup 编译脚本就行了。
方法1最专业,用 A 码和 U 码版本的  Inno Setup 都行,不过你的脚本要稍许复杂一点。Inno Setup 的示例脚本中有多语言安装程序的示例,你可以参考。
离线373723699

发帖
38
金钱
380
威望
38
只看该作者 4 发表于: 2014-10-27
回 3楼(gnatix) 的帖子
虎版,经过你的指点,又安装了InnoSetup 5.4.2(u)版本的,经测试基本可以实现在繁体系统上乱码显示的问题。
但是有个小缺陷,给你描述一下:
我使用InnoSetup 5.4.2(u)编译的最后,出现了这个警告。大改意思是没有定义语言,


我这个安装包一共有三种界面:简体中文,繁体中文,英文的。
针对这个警告,我应该怎么修改?
可能是这个现象引起的原因:“我这里有一个”是否保留用户选项“的弹窗,在繁体操作系统下显示仍是乱码”;而且在卸载检测进程的时候,也不自动杀进程了。(如AlarmRelay.exe这个进程,我在简体中文的系统环境下,是可以检测出来,并且杀掉的。
这个是我相应的代码,请您指点一下。
IAP V2.0.0.20.rar (10 K) 下载次数:4 代码脚本。


本帖提到的人: @gnatix
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 5 发表于: 2014-10-28
编译时出现的警告是因为你在脚本中书写有错误:
chinesesimp.cmDescriptionTypecustom=自定义
chinesetraditional.cmDescriptionTypecustom=自定義
english.cmDescriptionTypecustom=custom

另外:
既然使用多语言安装界面,最后不要使用简体中文文件名。
而且所有在界面中要出现的文字,不要直接写简体中文,而是要在 [CustomMessages] 段中定义。
离线373723699

发帖
38
金钱
380
威望
38
只看该作者 6 发表于: 2014-10-28
虎版,我代码处有这两个问题不太明白。
如下,这个是我其中的问题部分
[CustomMessages]段

chinesesimp.cmUnload=您是否要保留用户配置信息?
chinesetraditional.cmUnload=您是否要保留用戶配置信息?
english.cmUnloadm=Are you sure to save configuration information?

【code】

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if ActiveLanguage = 'chinesesimp' then
begin
unload:='您是否要保留用户配置信息?'
end                ;

  if ActiveLanguage = 'english' then
begin
unload:='Are you sure to save configuration information?'
end            ;

if ActiveLanguage = 'chinesetraditional' then
begin
unload:='您是否要保留用戶配置信息?'
end         ;

if CurUninstallStep =  usPostUninstall then                          
if MsgBox(CustomMessage('cmUnload'), mbConfirmation, MB_YESNO) = IDNO then
//删除 {app} 文件夹及其中所有文件
DelTree(ExpandConstant('{app}'), True, True, True);
RegDeleteKeyIncludingSubkeys(HKCU, 'Software\IAP')
end;

为什么还是会警告没有定义,[CustomMessages]段chinesetraditional.后面的部分应该怎么写才对?


第二个问题:

while IsAppRunning
do
begin
if MsgBox('检测到AlarmRelay正在运行,卸载时请关闭!'#13'要自动关闭它并继续吗?', mbConfirmation, MB_OKCANCEL) = IDOK then
begin
Exec(ExpandConstant('{app}\tools\janhkill.exe'), 'AlarmRelay.exe', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
IsAppRunning:= IsModuleLoaded('AlarmRelay.exe');
end

这个是一个检测进程,然后卸载的代码段,会发生一种情况,我AlarmRelay.exe在有一些机子上打开,是叫AlarmRelay.exe *32   可是是跟操作系统32位有关系,这导致我杀不掉,我应该怎么修改这个?


麻烦指点一下,谢谢你。
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 7 发表于: 2014-10-28
第一,还是提醒你写脚本时注意书写错误,多一个少一个字母都会带来问题的。
[CustomMessages]
chinesesimp.cmUnload=您是否要保留用户配置信息?
chinesetraditional.cmUnload=您是否要保留用戶配置信息?
english.cmUnloadm=Are you sure to save configuration information?


第二,提醒你在 Code 段不要直接使用字符串,特别是繁体中文,这样直接使用的字符串你在简体中文环境下的编译器中显示可能没有问题,但是在编译后的安装程序中一般都会是乱码。正确的方法是在 [CustomMessages] 段定义常量,在 Code 段只是调用常量,比如:
不要用下面这样的代码:
if ActiveLanguage = 'chinesesimp' then
begin
unload:='您是否要保留用户配置信息?';
end;
if ActiveLanguage = 'english' then
begin
unload:='Are you sure to save configuration information?';
end;
if ActiveLanguage = 'chinesetraditional' then
begin
unload:='您是否要保留用戶配置信息?';
end ;

直接用
unload:= CustomMessage('cmUnload');
就行了。

同样的道理,下面这样的代码会导致在繁体中文系统下乱码,无论你是不是用 Unicode 版本的 Inno Setup 制作的安装程序,
if MsgBox('检测到AlarmRelay正在运行,卸载时请关闭!'#13'要自动关闭它并继续吗?', mbConfirmation, MB_OKCANCEL) = IDOK then


关于杀进程的问题,我帮不了你的忙。我不知道你的用法是否正确。

离线373723699

发帖
38
金钱
380
威望
38
只看该作者 8 发表于: 2014-10-30
帮我很多了,谢谢虎版。
本帖提到的人: @gnatix