【问题标题】:How to execute files in Inno setup with multiple radio buttons?如何使用多个单选按钮在 Inno 设置中执行文件?
【发布时间】:2013-08-06 17:34:51
【问题描述】:

如何使用 Inno 将 file1.exe、file2.exe 和 file3.exe 包装在单个安装文件中,以便在用户选择其关联的单选按钮时启动选择的文件#?

请查看我正在尝试制作的完整脚本。由于 [Files] 或任何类型的过程和侦听器上没有 Check 标志,因此单击 Next - 所有 3 个文件一个接一个地启动。

===

[Setup]   
CreateAppDir=no   
OutputDir=C:\Single-Exe   
OutputBaseFilename=setup   
Compression=lzma   
SolidCompression=yes   
DisableWelcomePage=True   
DisableReadyPage=True   
DisableFinishedPage=True   
Uninstallable=no

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Files]
Source: file1.exe; DestDir: {app};
Source: file2.exe; DestDir: {app};
Source: file3.exe; DestDir: {app};

[Run]
Filename: {app}\file1.exe; Flags: hidewizard runhidden 32bit; WorkingDir: {localappdata}
Filename: {app}\file2.exe; Flags: hidewizard runhidden 32bit; WorkingDir: {localappdata}
Filename: {app}\file3.exe; Flags: hidewizard runhidden 64bit; WorkingDir: {localappdata}

[Code]
const
  FileOneDesc =
    'Select if you want to run File1.exe';
  FileTwoDesc =
    'Select if you want to run File2.exe';
  FileThreeDesc =
    'Select if you want to run File3.exe';

var
  FileOneButton: TNewRadioButton;
  FileTwoButton: TNewRadioButton;
  FileThreeButton: TNewRadioButton;

procedure InitializeWizard;
var                                                 
  CustomPage: TWizardPage;
  FileOneDesclabel: TLabel;
  FileTwoDesclabel: TLabel;
  FileThreeDesclabel: TLabel;

begin
  CustomPage := CreateCustomPage(wpWelcome, 'Multiple executable pre-launch wizard', '');
  FileOneButton := TNewRadioButton.Create(WizardForm);
  FileOneButton.Parent := CustomPage.Surface;
  FileOneButton.Top := 16;     
  FileOneButton.Width := CustomPage.SurfaceWidth;
  FileOneButton.Font.Style := [fsBold];
  FileOneButton.Font.Size := 9;
  FileOneButton.Caption := 'Run File #1'
  FileOneDescLabel := TLabel.Create(WizardForm);
  FileOneDescLabel.Parent := CustomPage.Surface;
  FileOneDescLabel.Left := 8;
  FileOneDescLabel.Top := FileOneButton.Top + FileOneButton.Height + 8;
  FileOneDescLabel.Width := CustomPage.SurfaceWidth;
  FileOneDescLabel.Height := 40;
  FileOneDescLabel.AutoSize := False;
  FileOneDescLabel.Wordwrap := True;
  FileOneDescLabel.Caption := FileOneDesc;

  FileTwoButton := TNewRadioButton.Create(WizardForm);
  FileTwoButton.Parent := CustomPage.Surface;
  FileTwoButton.Top := FileOneDesclabel.Top + FileOneDesclabel.Height + 8;
  FileTwoButton.Width := CustomPage.SurfaceWidth;
  FileTwoButton.Font.Style := [fsBold];
  FileTwoButton.Font.Size := 9;
  FileTwoButton.Caption := 'Run File #2'
  FileTwoDescLabel := TLabel.Create(WizardForm);
  FileTwoDescLabel.Parent := CustomPage.Surface;
  FileTwoDescLabel.Left := 8;
  FileTwoDescLabel.Top := FileTwoButton.Top + FileTwoButton.Height + 8;
  FileTwoDescLabel.Width := CustomPage.SurfaceWidth;
  FileTwoDescLabel.Height := 40;
  FileTwoDescLabel.AutoSize := False;
  FileTwoDescLabel.Wordwrap := True;
  FileTwoDescLabel.Caption := FileTwoDesc;

  FileThreeButton := TNewRadioButton.Create(WizardForm);
  FileThreeButton.Parent := CustomPage.Surface;
  FileThreeButton.Top := FileTwoDesclabel.Top + FileTwoDesclabel.Height + 10;
  FileThreeButton.Width := CustomPage.SurfaceWidth;
  FileThreeButton.Font.Style := [fsBold];
  FileThreeButton.Font.Size := 9;
  FileThreeButton.Caption := 'Run File #3'
  FileThreeDescLabel := TLabel.Create(WizardForm);
  FileThreeDescLabel.Parent := CustomPage.Surface;
  FileThreeDescLabel.Left := 8;
  FileThreeDescLabel.Top := FileThreeButton.Top + FileThreeButton.Height + 8;
  FileThreeDescLabel.Width := CustomPage.SurfaceWidth;
  FileThreeDescLabel.Height := 40;
  FileThreeDescLabel.AutoSize := False;
  FileThreeDescLabel.Wordwrap := True;
  FileThreeDescLabel.Caption := FileThreeDesc;
  end;

【问题讨论】:

    标签: inno-setup


    【解决方案1】:

    [Run] 部分具有 Check 参数,就像所有其他条目被分隔成参数的部分一样。在你的情况下,我会写一个像这样的通用检查函数:

    [Run]
    Filename: {app}\file1.exe; Flags: hidewizard runhidden 32bit; WorkingDir: {localappdata}; Check: ShouldRunItem(1)
    Filename: {app}\file2.exe; Flags: hidewizard runhidden 32bit; WorkingDir: {localappdata}; Check: ShouldRunItem(2)
    Filename: {app}\file3.exe; Flags: hidewizard runhidden 64bit; WorkingDir: {localappdata}; Check: ShouldRunItem(3)
    ...
    
    [Code]
    function ShouldRunItem(Value: Integer): Boolean;
    begin
      Result := False;
      case Value of
        1: Result := FileOneButton.Checked;
        2: Result := FileTwoButton.Checked;
        3: Result := FileThreeButton.Checked;
      end;
    end;
    

    【讨论】:

    • 亲爱的 TLama - 感谢您的宝贵时间和帮助。您的功能非常适合这个项目。也感谢@RobeN。
    • 还请告知我如何在启动时禁用“下一步”按钮并在选择任何一个收音机后启用它?
    • 您应该将此作为一个单独的问题提出,但我会例外,因为您是新来的,并且您已经很好地格式化了您的代码。你可以这样做,例如this way。请注意,我将 CustomPage 变量移动到全局范围,以便新添加的 CurPageChanged 事件方法可用,并为单选按钮添加了 OnClick 事件处理程序。原理很简单。当用户进入您的自定义页面并且没有选中任何单选按钮时,下一个按钮将被禁用。仅当用户单击(选择)某些单选按钮时才启用。
    • TLama,我非常感谢您的帮助,特别是在详细解释什么是什么、如何以及为什么。我不仅是新来的,我也是 Inno 高级的新手,所以我正在学习:) 一切顺利!
    猜你喜欢
    • 2013-08-03
    • 2015-08-22
    • 2010-12-14
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多