Копирование скрытых файлов в Inno Setup

Как использовать копирование скрытых внешних файлов в Inno Setup? Не для того, чтобы сделать файл скрытым, а для работы со скрытыми файлами. Потому что пока: скрытые файлы игнорируются

Любая помощь? Спасибо)

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

2 ответа

Решение

Когда вы выбираете файлы в [Files] При вводе раздела с использованием группового символа установщик Inno Setup явно пропускает скрытые файлы.

Вы ничего не можете с этим поделать.

Увидеть RecurseExternalCopyFiles функция в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 }

(Это для внешних файлов, поскольку это то, что вы используете. Но для файлов времени компиляции, это то же самое. BuildFileList в Compile.pas).


Все, что вы можете сделать, это осуществить установку в [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: рекурсивно копируйте папки, подпапки и файлы в разделе кода.


Для файлов времени компиляции (без external флаг), вы можете создать список [Files] записи с использованием функции препроцессораFindFirst,

Ответ: ВЫ МОЖЕТЕ

  1. сделать так, чтобы окна отображали скрытые файлы, чтобы вы могли их видеть
  2. с вашими файлами скрыты, как вы хотите их внутри папки.
  3. при добавлении исходной папки и файлов просто добавьте папку (этот подстановочный знак *) как обычно, программа установки Inno не добавит скрытые файлы. так что добавьте их отдельно.
  4. после завершения всех шагов не запускайте скрипт и редактируйте код..

перейдите в раздел [Files]:

[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

затем вы можете запустить скрипт из маленькой зеленой кнопки воспроизведения на верхней панели для компиляции. и вы сделали;)

Другие вопросы по тегам