在 Inno Setup 中选择一个目录来安装预定义集中的文件

问题描述 投票:0回答:1

在这种情况下,我需要将文件安装到特定目录,但在不同的计算机上它可能位于不同的文件夹中,所以我需要检查哪个是正确的。

例如,我有一个文件,需要安装在

A
文件夹或
B
文件夹或
C
文件夹中,取决于计算机有
A
B
C
。所以我需要先检查它们,如果电脑有
B
,然后将文件安装在
B
文件夹中,等等

我知道我可以在文件后使用检查

DestDir
,如果该目录不存在,那么它不会安装任何东西,但我需要的是将该文件安装到其他目录。

提前致谢。

directory inno-setup
1个回答
2
投票

InitializeSetup
事件功能中,检查是否存在预定义的目录集并记住您找到的目录。然后使用 DefaultDirName 指令
中的
脚本常量
将默认安装路径设置为找到的路径。

您可能还想设置

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}
部分的相应条目中使用
DestDir: "{code:GetDirName}"
,而不是使用
[Files]

© www.soinside.com 2019 - 2024. All rights reserved.