InitializeSetup
event functionには、定義済みのディレクトリが存在するかどうかを確認し、見つかったものを覚えておいてください。次に、DefaultDirName
directiveのscripted constantを使用して、デフォルトのインストールパスを見つけたパスに設定します。
DisableDirPage=yes
とUsePreviousAppDir=no
も設定できます。
[Setup]
DefaultDirName={code:GetDirName}
DisableDirPage=yes
UsePreviousAppDir=no
[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
[Code]
var
DirName: string;
function TryPath(Path: string): Boolean;
begin
Result := DirExists(Path);
if Result then
begin
Log(Format('Path %s exists', [Path]))
DirName := Path;
end
else
begin
Log(Format('Path %s does not', [Path]))
end;
end;
function GetDirName(Param: string): string;
begin
Result := DirName;
end;
function InitializeSetup(): Boolean;
begin
Result :=
TryPath('C:\path1') or
TryPath('C:\path2') or
TryPath('C:\path3');
if Result then
begin
Log(Format('Destination %s selected', [DirName]))
end
else
begin
MsgBox('No destination found, aborting installation', mbError, MB_OK);
end;
end;
代わりのDefaultDirName={code:GetDirName}
を使用して、適切な場合、あなたはまた、[Files]
セクションの各エントリでDestDir: "{code:GetDirName}"
を使用することができます。
「宛先の選択」で目的のフォルダを選択できないようにしたいのですか?代わりに、ターゲットマシンに存在する場所に応じて、自動的に場所を選択したいと思っています。 –
ハードコードされたディレクトリセットを試す代わりに、何らかのレジストリキーを読むような正しい場所を選択する方法はありませんか? –