5

使用 Inno Setup 5.5.2 我试图根据路径的存在有条件地跳过安装目录的选择。具体来说,如果“D:\”驱动器可用,我希望将其安装在预定义的位置而不提示,如果它不可用,则提供具有合理默认值的提示。

我有适用于的代码DefaultDirName,但不适用于DisableDirPage

[Code]
const 
   DefaultDrive = 'D:\';
   AppFolder = 'SomeDir';

function GetDefaultDir( Param: String ) : String;
begin
   if DirExists( DefaultDrive ) then begin
      Result := DefaultDrive + AppFolder;
   end else begin
      Result := ExpandConstant('{pf}\') + AppFolder;
   end;
end;

function DefaultDirValid( Param: String ) : Boolean;
begin
   Result := DirExists( DefaultDrive );
end;

[Setup]
; Works as expected
DefaultDirName={code:GetDefaultDir}

...

; Compiler Error - Value of [Setup] section directive "DisableDirPage" is invalid.
DisableDirPage={code:DefaultDirValid}

我尝试使用函数来DisableDirPage返回“yes”和“no”的字符串,以及 0 和 1 的整数。我还尝试过内联对DirExists. 都产生了相同的编译器错误。

我最好的猜测是,它与DisableDirPage采用三态 yes、no 或 auto 的事实有关。是否存在与需要返回的三态逻辑关联的特定类型?Inno Help on Scripted Constants只说:

被调用的函数必须有 1 个名为 Param 的字符串参数,并且必须根据使用常量的位置返回字符串或布尔值。

4

1 回答 1

8

使用事件处理程序,当常量路径存在时,您可以使用以下脚本ShouldSkipPage跳过目录选择页面:DefaultDrive

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={code:GetDefaultDir}

[Code]
const 
  DefaultDrive = 'D:\';
  AppFolder = 'Some Folder';

function GetDefaultDir(Param: string): string;
begin
  Result := DefaultDrive + AppFolder;
  if not DirExists(DefaultDrive) then
    Result := ExpandConstant('{pf}\') + AppFolder;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := (PageID = wpSelectDir) and DirExists(DefaultDrive);
end;
于 2012-10-11T13:53:47.450 回答