【问题标题】:Copying hidden files in Inno Setup在 Inno Setup 中复制隐藏文件
【发布时间】:2016-03-07 03:14:18
【问题描述】:

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

有什么帮助吗?谢谢)

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

【问题讨论】:

  • 您需要更加具体。 Inno Setup 不关心文件是否隐藏,它们可以像任何其他文件一样被删除和替换。您具体想做什么?请在您的edit 中包含安装脚本中的代码。如果您没有清楚地解释问题,我们将无法帮助您。
  • 如果 文件夹 中的文件被隐藏 - 没有任何反应)
  • {src}source 文件(设置中的文件)的路径。为什么需要将它隐藏在 source 中? (您已经清楚地看到它,因为您自己将它添加到源中。)您的[Files] 条目清楚地表明文件来自{src}\folder`, but you're trying to load from {src}\file.txt`。请在问题本身而不是 cmets 中为您的问题提供更多信息。
  • 这个脚本是我能提供的所有信息 =(
  • 为什么文件被隐藏时它不起作用?

标签: inno-setup


【解决方案1】:

当您使用通配符在[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的实现,请参阅我对问题Inno Setup: copy folder, subfolders and files recursively in Code section的回答。


对于编译时文件(没有external 标志),您可以使用a preprocessor function FindFirst 生成[Files] 条目列表。

【讨论】:

  • 程序 DirectoryCopy 似乎只在源和目标在同一台机器上时才能复制文件,但通常情况并非如此。需要的是包含隐藏文件的源文件夹应该从 setup.exe(分发给最终用户进行安装的安装程序设置文件)中提取。这似乎没有发生,也许我错过了一些东西。
  • 这个问题是关于“复制隐藏的外部文件”。因此,您的评论是关于一个不同的问题,因此对于一个单独的问题,我可以看到您发布的内容:Installing hidden files using Inno Setup
【解决方案2】:

答案是你可以

  1. 让窗口显示隐藏文件,以便您可以看到它们
  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

并在您希望隐藏的文件旁边插入Attribs: hidden; Flags:

[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

然后您可以从顶部栏的绿色小播放按钮运行脚本进行编译。你就完成了;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多