当前位置: 首页 > 工具软件 > Inno Setup > 使用案例 >

Inno Setup 语法

朱硕
2023-12-01

#define MyAppName "这是自定义变量值"   //这是自定义变量  其他段调用{#MyAppName} 

[Setup]  Setup段常用参数

Uninstallable=no                  // 不会生成卸载文件
Diskspanning = no              // 是否分包成bin文件  yes为是
Compression = none          // 是否进行压缩以及压缩方式  值 zip/1 - zip/9  依次压缩小  EXE启动快
CreateUninstallRegKey=no  //不允许写注册表

0、常用常量

{app}                // 值 软件的安装目录 可在[Files]段调用  [Setup]段的DefaultDirName

{userdocs}      // 值 用户文档目录  C:\Users\用户名\Documents

{username}     // 值 当前运行WIN的用户名 在[Setup]段可用

{tmp}

// 值 临时目录中子目录(如名为“C:\WINDOWS\TEMP\IS-xxxxx.tmp”)。程序退出后自动删除。

{localappdata}               // 值 C:\Users\Administrator\AppData\Local

{userappdata}                //值 C:\Users\Administrator\AppData\Roaming

{commonappdata}         //值 C:\ProgramData                     [Files]段可调用

{userdesktop}                //值 C:\Users\Administrator\Desktop

Code

1、向导页面(页面ID对应意思):

字段说明
wpWelcome欢迎页
wpSelectDir选择目标位置
wpReady准备安装
wpInstalling正在安装
wpFinished安装完成

6、控件的方法和属性

Button.BringToFront;              // 按钮置最前

7、程序事件执行的顺序

Function InitializeSetup(): Boolean;      //第一步    

Function InstallDir(NoStr:String):String;  //软件的安装目录   第二步 

procedure InitializeWizard();  //第三步

Inno Setup 自带函数

GetUserNameString() :String       // 返回   获得系统当前用户名      

IsAdmin() :Boolean;                     //返回  当前用户是否管理员     

Random(100);                             //返回一个 0 - 100之间的随机整数

MsgBox('提示内容', mbInformation, Mb_OK);   // 弹出提示

CodeClasses.iss   这个文件 界面控件

procedure URLLabelOnClick(Sender: TObject);   //打开网址代码
var
  ErrorCode: Integer;
begin
  ShellExecAsOriginalUser('open', 'http://www.innosetup.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

注册表

原型:

function RegKeyExists(const RootKey: Integer; const SubKeyName: String): Boolean;

说明:

如果指定的注册表键存在,则返回 True。

示例:

begin
  if RegKeyExists(HKEY_CURRENT_USER, 'Software\Jordan Russell\Inno Setup')then
  begin
    // 键存在
  end;
end;


原型:

function RegValueExists(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;

说明:

如果指定的注册表键和值存在,则返回 True。

示例:

begin
  if RegValueExists(HKEY_CURRENT_USER, 'Console', 'WindowSize')then
  begin
    // 值存在
  end;
end;


原型:

function RegGetSubkeyNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;

说明:

打开指定的注册表键并读取子键名到指定的字串排列名。如果成功返回 True,否则返回 False。

示例:

var
  Names: TArrayOfString;
  I: Integer;
  S: String;
begin
  if RegGetSubkeyNames(HKEY_CURRENT_USER, '“控制面板”', Names)then
  begin
    S := '';
    for I := 0 to GetArrayLength(Names)-1 do
      S := S + Names[I] + #13#10;
    MsgBox('List of subkeys:'#13#10#13#10 + S, mbInformation, MB_OK);
  end else
  begin
    // 添加处理失败的代码
  end;
end;


原型:

function RegGetValueNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;

说明:

打开指定的注册表键,并将其值的名称读取到指定的字串数组 Names 中。如果成功则返回 True,否则返回 False。

示例:

var
  Names: TArrayOfString;
  I: Integer;
  S: String;
begin
  if RegGetValueNames(HKEY_CURRENT_USER, '“控制面板”\Mouse', Names)then
  begin
    S := '';
    for I := 0 to GetArrayLength(Names)-1 do
      S := S + Names[I] + #13#10;
    MsgBox('List of values:'#13#10#13#10 + S, mbInformation, MB_OK);
  end else
  begin
    // 在此添加任何处理失败的代码
  end;
end;


原型:

function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;

说明:

询问指定的 REG_SZ 或 REG_EXPAND_SZ 注册表键/值,并返回值到 ResultStr。如果成功则返回 True。当返回 False 时,不更改 ResultStr。

示例:

var
  Country: String;
begin
  if RegQueryStringValue(HKEY_CURRENT_USER, '“控制面板”\International',
     'sCountry', Country)then
  begin
    // 读取值成功
    MsgBox('Your country: ' + Country, mbInformation, MB_OK);
  end;
end;


原型:

function RegQueryMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;

说明:

询问指定的 REG_MULTI_SZ-type 注册表键/值,并返回值到 ResultStr。如果成功则返回 True。当返回 False 时,则不修改 ResultStr 值。

备注:

在 REG_MULTI_SZ-type 值中,每个字串用 null 字符(#0)隔开。

原型:

function RegQueryDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultDWord: Cardinal): Boolean;

说明:

询问指定的 REG_DWORD-type 注册表键值,并返回值到 ResultDWord。如果成功返回 True。当返回 False 时,不修改 ResultDWord 值。

示例:

var
  HistoryBufferSize: Cardinal;
begin
  if RegQueryDWordValue(HKEY_CURRENT_USER, 'Console',
     'HistoryBufferSize', HistoryBufferSize)then
  begin
    // 读取值成功
    MsgBox('Console 历史缓存大小:' + IntToStr(HistoryBufferSize),
      mbInformation, MB_OK);
  end;
end;


原型:

function RegQueryBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: AnsiString): Boolean;

说明:

询问指定的 REG_BINARY 注册表键/值,并返回值到 ResultStr。如果成功返回 True。当返回 False 时,不修改 ResultStr 值。

原型:

function RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;

说明:

写入指定的 REG_SZ-type 注册表键/值,如果完成则返回 True,反之返回 False。

备注:

如果值已经存在并且是 REG_EXPAND_SZ 类型,那么新值也将是 REG_EXPAND_SZ 类型,否则,将创建 a REG_SZ-type 值。

示例:

begin
  RegWriteStringValue(HKEY_AUTO, 'Software\My Company\My Program',
    'Language', ExpandConstant('{language}'));
end;


原型:

function RegWriteExpandStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;

说明:

写入指定的 REG_EXPAND_SZ-type 注册表值。如果完成则返回 True,否则返回 False。

示例:

begin
  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Company\My Program',
    'UserName', '%UserName%);
end;


原型:

function RegWriteMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;

说明:

写入指定的 REG_MULTI_SZ-type 注册表键/值,如果完成则返回 True,反之返回 False。

备注:

在 REG_MULTI_SZ-type 值中,每个字串用 null 字符(#0)隔开。

示例:

begin
  RegWriteMultiStringValue(HKEY_AUTO, 'Software\My Company\My Program',
    'MultiStringTest', 'String1' + #0 + 'String2' + #0 + 'String3');
end;


原型:

function RegWriteDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: Cardinal): Boolean;

说明:

写入指定的 REG_DWORD-type 注册表值,如果完成则返回 True,反之返回 False。

示例:

begin
  RegWriteDWordValue(HKEY_AUTO, 'Software\My Company\My Program',
    'ShowToolbar', 1);
end;


原型:

function RegWriteBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: AnsiString): Boolean;

说明:

写入指定的 REG_BINARY-type 注册表值,如果完成则返回 True,反之返回 False。

示例:

begin
  RegWriteBinaryValue(HKEY_AUTO, 'Software\My Company\My Program',
    'BinaryTest', 'Whatever' + #1#2#3#4);
end;


原型:

function RegDeleteKeyIncludingSubkeys(const RootKey: Integer; const SubkeyName: String): Boolean;

说明:

删除指定的键和所有子键。如果完成返回 True,否则返回 False。

原型:

function RegDeleteKeyIfEmpty(const RootKey: Integer; const SubkeyName: String): Boolean;

说明:

如果没有子键或值则删除指定的子键。如果完成则返回 True,否则返回 False。

原型:

function RegDeleteValue(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;

说明:

删除指定的值。如果完成返回 True,否则返回 False。

2、取消按钮事件
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
        // 取消关闭按钮 执行代码
end;

WizardForm.NextButton.OnClick(WizardForm); // 下一步 安装按钮 事件 按钮名称 NextButton

5、操作注册表

//上下是等同的,上面是简写

RegGetSubkeyNames(HKLM, Subkey,  names

RegGetSubkeyNames(HKEY_LOCAL_MACHINE, Subkey,  names

4、窗体事件

procedure InitializeWizard(); //载入窗口事件

说明 :使用这个事件函数启动时改变向导或向导页。你不能在它触发之后使用 InitializeSetup 事件函数,向导窗体不退出。

function InitializeSetup (): Boolean;

说明:在安装程序初始化时调用,返回 False 中断安装,返回 True 反之。

procedure DeinitializeSetup(); //退出程序后事件

说明:仅在安装程序终止前调用。注意这个函数在即使用户在任何内容安装之前退出安装程序时也会调用。

procedure DeinitializeUninstall(); // 卸载后弹出窗口

procedure CurStepChanged (CurStep: TSetupStep );

你可以用这个事件函数执行你自己的预安装和安装后任务。
 

 类似资料: