在 Inno Setup 中复制隐藏文件

Copying hidden files in Inno Setup

如何在Inno Setup中使用复制隐藏的外部文件?不是隐藏文件,而是处理隐藏文件。因为现在:隐藏文件被忽略

有什么帮助吗?谢谢 )

[Files]
Source: "{src}\folder\*"; DestDir: "{app}"; \
    Flags: skipifsourcedoesntexist external ignoreversion recursesubdirs createallsubdirs; 

当您 select 文件在 [Files] 部分条目中使用通配符时,Inno Setup 安装程序会明确跳过隐藏文件。

你对此无能为力。

参见RecurseExternalCopyFiles function in Projects\Install.pas,特别是这部分:

if SourceIsWildcard then begin
  if FindData.dwFileAttributes and FILE_ATTRIBUTE_HIDDEN <> 0 then
    Continue; { <-- Skip hidden files, comment by @MartinPrikryl }
  FileName := FindData.cFileName;
end
else
  FileName := SearchWildcard;  { use the case specified in the script }

(这是针对外部文件的,因为那是您使用的。但是对于编译时文件,它是相同的。请参阅 Compile.pas 中的 BuildFileList)。


您所能做的就是自己在 [Code] 脚本中实现安装,而不是使用 [Files] 部分。

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
  begin
    Log('Installing files');
    DirectoryCopy(ExpandConstant('{src}\folder'), ExpandConstant('{app}'));
  end;
end;

关于 DirectoryCopy 的实施,请参阅我对问题 的回答。


对于编译时文件(没有 external 标志),您可以使用 a preprocessor function FindFirst.

生成 [Files] 条目的列表

答案是你可以

  1. 使 windows 显示隐藏文件只是为了让您能够看到它们
  2. 根据需要将文件隐藏在文件夹中。
  3. 添加源文件夹和文件步骤时,通常只添加文件夹(此通配符*),Inno setup 不会添加隐藏文件。所以分开添加。
  4. 完成所有步骤后,不要 运行 脚本并编辑代码..

转到 [文件] 部分:

[Files]
Source: "H:\tmp\sweetInstaller\installer.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "H:\tmp\sweetInstaller\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "H:\tmp\sweetInstaller\hidden_file1.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "H:\tmp\sweetInstaller\hidden_file2.bat"; DestDir: "{app}"; Flags: ignoreversion

并在 Flags:

之前要隐藏的文件旁边插入 Attribs: hidden;
[Files]
Source: "H:\tmp\sweetInstaller\installer.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "H:\tmp\sweetInstaller\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "H:\tmp\sweetInstaller\hidden_file1.txt"; DestDir: "{app}"; Attribs: hidden; Flags: ignoreversion
Source: "H:\tmp\sweetInstaller\hidden_file2.bat"; DestDir: "{app}"; Attribs: hidden; Flags: ignoreversion

然后您可以运行 顶部栏的绿色小播放按钮中的脚本进行编译。大功告成 ;)