Inno Setup CreateInputDirPage 但不检查文件夹是否存在

Inno Setup CreateInputDirPage but don't check for folder existence

我有一个 Inno Setup Pascal 脚本提示用户输入 4 个文件夹。其中三个文件夹应该已经存在。第 4 个用作我将来要挂载 VHD 磁盘的占位符。所以我只使用这个文件夹的字符串值。

当用户运行脚本时,他得到一个错误,UNC 路径不存在(好吧,是的,它不应该存在。例如,如果他说 "L:\myfolder" 那么 L: 驱动器是尚未加载,那里没有磁盘。没错。我的 Inno Setup 脚本稍后会为您加载它。

如何禁用文件夹检查?

FoldersPage := CreateInputDirPage(InfoPage.ID,
  'FoldersSettings', 'Customize folders settings for non-standard EGPL systems',
  'If the defaults are acceptable, then click Next.',
  False, 'New Folder');
FoldersPage.Add('GeoPackage Output Folder');
FoldersPage.Add('VHD Mount Path for GeoLibrarian');
FoldersPage.Add('EGPL Source Folder');
FoldersPage.Add('WWW Root Folder');

您不能禁用验证。

您可以通过使用 .Add 仅添加三个输入来解决这个问题。并手动添加第四个输入,控制它。

var
  DataDirPage: TInputDirWizardPage;
  CustomDirEdit: TEdit;

procedure InitializeWizard;
var
  Index: Integer;
  Offset: Integer;
  PromptLabel: TNewStaticText;
  UltimateEdit: TEdit;
  PenultimateEdit: TEdit;
  UltimateLabel: TNewStaticText;
begin
  DataDirPage := CreateInputDirPage(wpSelectDir,
    'FoldersSettings', 'Customize folders settings for non-standard EGPL systems',
    'If the defaults are acceptable, then click Next.',
    False, 'New Folder');

  DataDirPage.Add('GeoPackage Output Folder');
  Index := DataDirPage.Add('VHD Mount Path for GeoLibrarian');
  PenultimateEdit := DataDirPage.Edits[Index];
  Index := DataDirPage.Add('EGPL Source Folder');
  UltimateEdit := DataDirPage.Edits[Index];
  UltimateLabel := DataDirPage.PromptLabels[Index];

  Offset := UltimateEdit.Top - PenultimateEdit.Top;

  PromptLabel := TNewStaticText.Create(WizardForm);
  PromptLabel.Top := UltimateLabel.Top + Offset;
  PromptLabel.Width := UltimateLabel.Width;
  PromptLabel.Height := UltimateLabel.Height;
  PromptLabel.Parent := DataDirPage.Surface;
  PromptLabel.Caption := 'WWW Root Folder';

  CustomDirEdit := TEdit.Create(WizardForm);
  CustomDirEdit.Top := UltimateEdit.Top + Offset;
  CustomDirEdit.Width := UltimateEdit.Width;
  CustomDirEdit.Parent := DataDirPage.Surface;

  PromptLabel.FocusControl := CustomDirEdit;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;

  if CurPageID = DataDirPage.ID then
  begin
    if CustomDirEdit.Text = '' then
    begin
      MsgBox('You must enter WWW Root Folder.', mbError, MB_OK);
      Result := False;
    end;

    // Any other validation
  end;
end;

这没有 浏览 按钮。还有更多的工作,我不确定它是否有意义,因为输入用于输入不存在的驱动器路径。