Установка скрытых файлов с помощью Inno Setup - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно установить набор скрытых файлов, охватывающих несколько папок, на компьютере конечного пользователя, используя настройки, созданные с помощью Inno Setup. Я упомянул Копирование скрытых файлов в Inno Setup , но похоже, что указанная там функция DirectoryCopy копирует файлы с одного компьютера на другой.

Мне нужно, чтобы скрытые файлы были извлечены из файла setup.exe и затем установлены на компьютере конечного пользователя, который будет отличаться от компьютера, на котором была создана установка.

1 Ответ

0 голосов
/ 07 мая 2018

Когда параметр [Files] section Source является подстановочным знаком, скрытые файлы игнорируются. См BuildFileList в Compile.pas.

Простое решение - удалить скрытый атрибут из исходных файлов.


Если вы не можете удалить скрытый атрибут (например, если вам необходимо сохранить его при установке), вы можете сгенерировать записи раздела [Files], используя препроцессор , избегая использования подстановочного знака.

#pragma parseroption -p-

; If the file is found by calling FindFirst without faHidden, it's not hidden
#define FileParams(FileName) \
    Local[0] = FindFirst(FileName, 0), \
    (!Local[0] ? "; Attribs: hidden" : "")

#define FileEntry(Source, DestDir) \
    "Source: \"" + Source + "\"; DestDir: \"" + DestDir + "\"" + \
    FileParams(Source) + "\n"

#define ProcessFile(Source, DestDir, FindResult, FindHandle) \
    FindResult \
        ? \
            Local[0] = FindGetFileName(FindHandle), \
            Local[1] = Source + "\\" + Local[0], \
            (Local[0] != "." && Local[0] != ".." \
                ? (DirExists(Local[1]) \
                      ? ProcessFolder(Local[1], DestDir + "\\" + Local[0]) \
                      : FileEntry(Local[1], DestDir)) \
                : "") + \
            ProcessFile(Source, DestDir, FindNext(FindHandle), FindHandle) \
        : \
            ""

#define ProcessFolder(Source, DestDir) \
    Local[0] = FindFirst(Source + "\\*", faAnyFile), \
    ProcessFile(Source, DestDir, Local[0], Local[0])

#pragma parseroption -p+

Используйте макрос ProcessFolder, например:

[Files]

#emit ProcessFolder("C:\source", "{app}")

Будет сгенерирован скрипт, подобный:

[Files]
Source: "C:\source\file.txt"; DestDir: "{app}"
Source: "C:\source\subfolder\file.jpg"; DestDir: "{app}\subfolder"
Source: "C:\source\subfolder\hidden.txt"; DestDir: "{app}\subfolder"; Attribs: hidden

(См. Inno Setup: как посмотреть вывод (перевод) препроцессора Inno Setup? )


Ntb, вопрос , на который вы ссылаетесь , касается копирования внешних файлов, поэтому он не имеет отношения к вашей проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...