Inno Setup根据设置类型运行代码

时间:2015-11-05 11:04:30

标签: inno-setup pascalscript

我想提供几种不同的安装类型,对我的安装程序执行不同的操作:如果选择“ApplicationServer”类型,则只执行部分代码。如果选择了客户端类型,则只执行此部分过程。

我试图在名为

的函数中包含2个“代码块”
[Types]
Name: "application"; Description: "{cm:ApplicationServer}"
Name: "client"; Description: "{cm:Client}"

[CustomMessages]
ApplicationServer=Application Server:
Client=Client:

如果选择了第一个选项,我想执行由几个过程,常量,变量组成的特定代码来运行一系列SQL脚本,而如果选择第二个,我需要在代码区域中执行其他一些操作,像这样:

[Code]

function ApplicationServer(blabla)
begin:
  { <!This part only to run for ApplicationServer type!> }
  { following constants and variables for the ADO Connection + SQL script run }
  const
    myconstant1=blabla;
  var
    myvar1=blabla;    
  { here all the procedure to define and manage an ADO Connection to run a sql script }
  { procedure 1 }
  { procedure 2 }
end

function Client(blabla)
begin:
  { <!This part only to run for Client type!> }
  { following constants and variables only for performing some stuffs on top of client }
  const
    myconstant2=blabla;
  var
    myvar2=blabla;
  { procedure 3 }
  { procedure 4 }
end

有没有办法根据正在运行的安装类型管理代码的特定部分?

感谢。

1 个答案:

答案 0 :(得分:1)

使用WizardSetupType support function

您可能需要检入CurStepChanged event function

procedure ApplicationServer;
begin
  { procedure 1 }
  { procedure 2 }
end;

procedure Client;
begin
  { procedure 1 }
  { procedure 2 }
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  SetupType: string;
begin
  Log(Format('CurStepChanged %d', [CurStep]));

  if CurStep = ssInstall then
  begin
    SetupType := WizardSetupType(False);

    if SetupType = 'application' then
    begin
      Log('Installing application server');
      ApplicationServer;
    end
      else
    if SetupType = 'client' then
    begin
      Log('Installing client');
      Client;
    end
      else
    begin
      Log('Unexpected setup type: ' + SetupType);
    end;
  end;
end;

Pascal脚本不支持本地常量,只支持全局常量。

无论如何,如果你想要一个局部常量或有条件地初始化一个全局常量,你还不清楚。无论如何你不能做后者,常数是常数,它不能有不同的值。

与变量相同。 是这些局部变量还是要有条件地将值设置为全局变量?