Inno Setup 根据安装类型运行代码

问题描述 投票:0回答:1

我想提供几种不同的安装类型,对我的安装程序执行不同的操作:如果选择“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

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

谢谢。

inno-setup pascalscript
1个回答
2
投票

使用

WizardSetupType
支持功能

您可能想在

CurStepChanged
事件函数中检查它。

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 脚本不支持局部常量,仅支持全局常量。

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

你的变量也一样。 这些是局部变量还是您想有条件地为全局变量设置值?

© www.soinside.com 2019 - 2024. All rights reserved.