在 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]
条目的列表
答案是你可以
- 使 windows 显示隐藏文件只是为了让您能够看到它们
- 根据需要将文件隐藏在文件夹中。
- 添加源文件夹和文件步骤时,通常只添加文件夹(此通配符*),Inno setup 不会添加隐藏文件。所以分开添加。
- 完成所有步骤后,不要 运行 脚本并编辑代码..
转到 [文件] 部分:
[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
然后您可以运行 顶部栏的绿色小播放按钮中的脚本进行编译。大功告成 ;)
如何在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]
条目的列表
答案是你可以
- 使 windows 显示隐藏文件只是为了让您能够看到它们
- 根据需要将文件隐藏在文件夹中。
- 添加源文件夹和文件步骤时,通常只添加文件夹(此通配符*),Inno setup 不会添加隐藏文件。所以分开添加。
- 完成所有步骤后,不要 运行 脚本并编辑代码..
转到 [文件] 部分:
[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
然后您可以运行 顶部栏的绿色小播放按钮中的脚本进行编译。大功告成 ;)