inno打包遇到的问题总结

1. 多国语言

[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

Name:代表的是语言名字,MessagesFile 代表的是 innoSetup 安装位置的语言翻译包
如果要让安装界面显示出 手动选择语言的框
加上这一句

ShowUndisplayableLanguages=yes

如果选择多国语言安装是 界面乱码, 要安装Inno Unicode版本,好像还要把inno 里面的language文件下相应的 isl文件改为 UTF-8 或者 UTF-8BOM 或者 ANIS 试一下 忘记了。
这里写图片描述
用Inno 打包好的exe 安装界面是根据你系统的语言来的,你如果只在上面[Languages]下面填了 中文,英文和俄文,那么在中文系统上,显示中文,俄文显示俄文,英文系统显示英文,如果在德文系统打开那么就不会显示德文应该会显示默认的中文。

2.安装完成应用后,附带安装一些其他的应用

2.1 如果不管选择何种安装语言,都指定同样的附带程序就是下面的这样写法

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,
Filename: "{app}\directx repair\DirectX_Repair-v3.5\DirectX Repair.exe";  Parameters: /Install /SILENT

在目录下的 directx repair 目录下的……DirectX Repair.exe文件
FileName:就是指定这个附带文件的路径及文件名字
这里写图片描述
2.2 根据选择的语言不通,选择不同的附带软件安装

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{code:GetDesktopName}}"; Flags: nowait postinstall skipifsilent
Filename: "{app}\{code:SelectPortFile}"; Description: "端口检查"; Flags: nowait runhidden skipifsilent

Filename:后面跟的是一个函数{code:SelectPortFile}
这个函数是自己写的返回的就是一个文件路径 下面有代码

function SelectPortFile(Param: String): String;
begin
  if(ActiveLanguage = 'chinesesimp') then//如果选择的语言是中文简体
  begin
    Result := 'port\tp_port_5021531_64_615.exe';
  end
  else if(ActiveLanguage = 'english') then//如果选择的语言是英文
  begin
    Result := 'port\tp_port_5021531_64_615.exe';
  end
  else
  begin
    Result := 'port\VCP_V1.4.0_Setup.exe';
  end;
end;

ActiveLanguage 是inno 系统定义的 你所选择的语言名称
这里写图片描述

3.根据选择语言不通生成的快捷方式的名字不同

比如 安装的中文版 叫 小明音乐,英文版本 叫 XiaoMingMusic

[Code]
function GetDesktopName(Param: String): String;
begin 
  if (ActiveLanguage = 'chinesesimp') then
  begin
    Result := 'Aelos_简化版';
  end 
  else if(ActiveLanguage = 'english') then
  begin
    Result := 'Aelos_simple';
  end
  else
  begin
    Result := 'Aelos-Упрощенная версия';
  end;
end;
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{code:GetDesktopName}}"; Flags: nowait postinstall skipifsilent
[Icons]
Name: "{commonprograms}\{code:GetDesktopName}"; Filename: "{app}\Aelos_simple.exe"
Name: "{commondesktop}\{code:GetDesktopName}"; Filename: "{app}\Aelos_simple.exe"; Tasks: desktopicon

4.安装文件后写注册表(也是根据选择的语言版本进行注册相应的值)

[Registry]  
Root: HKCR; Subkey: "AelosSimple"; ValueType: String; ValueName: "Language"; ValueData: {code:GetSetupLanguage}; Flags: uninsdeletekey
[Code]
function GetSetupLanguage(Param: String): String;
begin 
  if (ActiveLanguage = 'chinesesimp') then
  begin
    Result := 'Simplified Chinese';
  end 
  else if (ActiveLanguage = 'chinesetrad') then
  begin
    Result := 'Tradtional Chinese';
  end 
  else if(ActiveLanguage = 'english') then
  begin
    Result := 'English';
  end
  else
  begin
    Result := 'Russian';
  end;
end;

目前遇到的问题就这些下面附上全部的iss代码

; 脚本由 Inno Setup 脚本向导 生成!
; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!

#define MyAppName "Aelos_simple"
#define MyAppVersion "1.0"
#define MyAppPublisher "XXXXXXXXXXXXX"
#define MyAppURL "http://XXXXXXXXXXXX/"
#define MyAppExeName "Aelos_simple.exe"

[Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。)
AppId={{09725B26-7BB3-4CD4-A42C-715AFD7B4E29}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputDir=D:\
OutputBaseFilename=Aelos_simple_setup
SetupIconFile=D:\PC_simple_package\simple_package_resource\simple\appLogo.ico
Compression=lzma
SolidCompression=yes
ShowUndisplayableLanguages=yes

[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
;Name: "chinesetrad"; MessagesFile: "compiler:Languages\ChineseTrad.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; 

[Files]
Source: "D:\PC_simple_package\simple_package_resource\simple\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”

[Icons]
Name: "{commonprograms}\{code:GetDesktopName}"; Filename: "{app}\Aelos_simple.exe"
Name: "{commondesktop}\{code:GetDesktopName}"; Filename: "{app}\Aelos_simple.exe"; Tasks: desktopicon

[Registry]  
Root: HKCR; Subkey: "AelosSimple"; ValueType: String; ValueName: "Language"; ValueData: {code:GetSetupLanguage}; Flags: uninsdeletekey

[Code]
function GetDesktopName(Param: String): String;
begin 
  if (ActiveLanguage = 'chinesesimp') then
  begin
    Result := 'Aelos_简化版';
  end 
  else if(ActiveLanguage = 'english') then
  begin
    Result := 'Aelos_simple';
  end
  else
  begin
    Result := 'Aelos-Упрощенная версия';
  end;
end;

function GetSetupLanguage(Param: String): String;
begin 
  if (ActiveLanguage = 'chinesesimp') then
  begin
    Result := 'Simplified Chinese';
  end 
  else if (ActiveLanguage = 'chinesetrad') then
  begin
    Result := 'Tradtional Chinese';
  end 
  else if(ActiveLanguage = 'english') then
  begin
    Result := 'English';
  end
  else
  begin
    Result := 'Russian';
  end;
end;

function SelectPortFile(Param: String): String;
begin
  if(ActiveLanguage = 'chinesesimp') then
  begin
    Result := 'port\tp_port_5021531_64_615.exe';
  end
  else if(ActiveLanguage = 'english') then
  begin
    Result := 'port\tp_port_5021531_64_615.exe';
  end
  else
  begin
    Result := 'port\VCP_V1.4.0_Setup.exe';
  end;
end;

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{code:GetDesktopName}}"; Flags: nowait postinstall skipifsilent
Filename: "{app}\{code:SelectPortFile}"; Description: "端口检查"; Flags: nowait runhidden skipifsilent
Filename: "{app}\directx repair\DirectX_Repair-v3.5\DirectX Repair.exe";  Parameters: /Install /SILENT

     98年菜鸡一枚,请大佬们多多照顾!

猜你喜欢

转载自blog.csdn.net/weixin_42837024/article/details/81509897