在这种情况下,我需要将文件安装到特定目录,但在不同的计算机上它可能位于不同的文件夹中,所以我需要检查哪个是正确的。
例如,我有一个文件,需要安装在
A
文件夹或B
文件夹或C
文件夹中,取决于计算机有A
或B
或C
。所以我需要先检查它们,如果电脑有B
,然后将文件安装在B
文件夹中,等等
我知道我可以在文件后使用检查
DestDir
,如果该目录不存在,那么它不会安装任何东西,但我需要的是将该文件安装到其他目录。
提前致谢。
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]
。