根据命令行参数在安装期间跳过文件
Skip files during installation depending on command line argument
我目前的方案是,我希望用户能够跳过安装用户可能在安装时通过命令行参数指定的某些文件。
这个想法是让用户指定一个文本文件,理想情况下,在安装过程中,安装程序会检查当前正在复制的文件是否列在提供的文本文件中,并据此做出决定。
我的 [Files]
部分 atm 引用了完整目录:最好的方法是单独列出所有文件并使用 Check
参数,还是有其他方法可用?似乎没有适合此任务的事件函数。
谢谢
马库斯
无需单独列出所有文件。即使 Source
是通配符,也会为每个文件单独调用 Check
function。
使用 CurrentFilename
function 来判断当前正在处理的文件。
请注意,Check
函数会为每个文件调用多次。
[Files]
Source: "C:\path\*.*"; DestDir: "{app}"; Check: AllowFile
[Code]
var
Whitelist: TStringList;
function AllowFile: boolean;
var
FileName: string;
begin
FileName := ExtractFileName(ExpandConstant(CurrentFileName));
Result := (Whitelist = nil) or (Whitelist.IndexOf(Uppercase(FileName)) >= 0);
if Result then
Log(Format('Allowing "%s"', [FileName]))
else
Log(Format('Skipping "%s"', [FileName]));
end;
function InitializeSetup(): Boolean;
var
WhitelistFile: string;
Lines: TArrayOfString;
I: Integer;
begin
WhitelistFile := ExpandConstant('{param:Whitelist}');
if WhitelistFile = '' then
begin
Log('No whitelist specified, allowing all files');
end
else
begin
Whitelist := TStringList.Create;
Whitelist.Sorted := True;
LoadStringsFromFile(WhitelistFile, Lines);
for I := 0 to GetArrayLength(Lines) - 1 do
Whitelist.Add(Uppercase(Lines[I]));
Log(Format('Loaded %d entries to whitelist from "%s"', [
Whitelist.Count, WhitelistFile]));
end;
Result := True;
end;
我目前的方案是,我希望用户能够跳过安装用户可能在安装时通过命令行参数指定的某些文件。
这个想法是让用户指定一个文本文件,理想情况下,在安装过程中,安装程序会检查当前正在复制的文件是否列在提供的文本文件中,并据此做出决定。
我的 [Files]
部分 atm 引用了完整目录:最好的方法是单独列出所有文件并使用 Check
参数,还是有其他方法可用?似乎没有适合此任务的事件函数。
谢谢 马库斯
无需单独列出所有文件。即使 Source
是通配符,也会为每个文件单独调用 Check
function。
使用 CurrentFilename
function 来判断当前正在处理的文件。
请注意,Check
函数会为每个文件调用多次。
[Files]
Source: "C:\path\*.*"; DestDir: "{app}"; Check: AllowFile
[Code]
var
Whitelist: TStringList;
function AllowFile: boolean;
var
FileName: string;
begin
FileName := ExtractFileName(ExpandConstant(CurrentFileName));
Result := (Whitelist = nil) or (Whitelist.IndexOf(Uppercase(FileName)) >= 0);
if Result then
Log(Format('Allowing "%s"', [FileName]))
else
Log(Format('Skipping "%s"', [FileName]));
end;
function InitializeSetup(): Boolean;
var
WhitelistFile: string;
Lines: TArrayOfString;
I: Integer;
begin
WhitelistFile := ExpandConstant('{param:Whitelist}');
if WhitelistFile = '' then
begin
Log('No whitelist specified, allowing all files');
end
else
begin
Whitelist := TStringList.Create;
Whitelist.Sorted := True;
LoadStringsFromFile(WhitelistFile, Lines);
for I := 0 to GetArrayLength(Lines) - 1 do
Whitelist.Add(Uppercase(Lines[I]));
Log(Format('Loaded %d entries to whitelist from "%s"', [
Whitelist.Count, WhitelistFile]));
end;
Result := True;
end;