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
私の推測では、イエス、ノー、またはオートの 3 つの状態を取るという事実と関係があると思われます。返す必要があるトライステート ロジックに関連付けられた特定の型はありますか? スクリプト化された定数に関する Inno のヘルプには、次のようにしか書かれていません。
呼び出された関数には、Param という名前の 1 つの文字列パラメーターが必要であり、定数が使用されている場所に応じて、文字列またはブール値を返す必要があります。