Как использовать ISPP для разделения размера файла на биты lo / hi для функции DwinsHs_Check

Возьми этот скрипт:

Source: "{tmp}\HelpDocSetup.exe"; \
    DestDir: "{app}"; \
    Flags: external deleteafterinstall; \
    Tasks: downloadhelp; \
    Check: DwinsHs_Check( ExpandConstant('{tmp}\HelpDocSetup.exe'), '{#HelpDocSetupURL}', 'My_Setup', 'Get', 0, 0 )

Увидеть 0, 0 в конце строки?


Согласно документации для DwinsHs_Check Говорится:

  • Размер файла: LongInt

    Вместе с FileSizeHigh Параметр указывает размер файла в байтах. Он будет использоваться для расчета хода загрузки и оставшегося времени. Это позволяет избежать задержек перед началом загрузки, поскольку сценарию не нужно извлекать размер файла с сервера.

    Этот параметр указывает младшие 31 бит размера файла, а FileSizeHigh Параметр указывает старшие 31 бит размера файла. Обратите внимание, не 32 бита.

    Обратите внимание, что размер файла будет получен с сервера, если для параметра установлено значение FILESIZE_QUERY_SERVER (0), FILESIZE_UNKNOWN (-1), или же FILESIZE_KEEP_FORMER (-2), В этом случае значение FileSize Параметр будет игнорироваться.

    Обратите внимание, что в этом параметре может использоваться только цифровое значение, постоянный идентификатор не может быть использован.

  • FileSizeHigh: LongInt

    Вместе с FileSize Параметр указывает размер файла в байтах. Он будет использоваться для расчета хода загрузки и оставшегося времени. Это позволяет избежать задержек перед началом загрузки, поскольку сценарию не нужно извлекать размер файла с сервера.

    Этот параметр указывает старшие 31 бит размера файла, а FileSize Параметр указывает младшие 31 бит размера файла.

    Обратите внимание, что значение этого параметра будет игнорироваться, если для параметра FileSize установлено значение FILESIZE_QUERY_SERVER (0), FILESIZE_UNKNOWN (-1), или же FILESIZE_KEEP_FORMER (-2),

    Обратите внимание, что в этом параметре может использоваться только цифровое значение, постоянный идентификатор не может быть использован.


Этот конкретный установочный файл также находится на моем компьютере. Относительно основного файла ISS путь будет:

..\HelpNDoc\CHM\Output\PublicTalksHelpDocumentationSetup.exe

Можем ли мы использовать ISPP, чтобы извлечь размер файла и разделить его как два параметра, необходимые для DwinsHs_Check?

1 ответ

Решение

Вы можете использовать FileSize Функция препроцессора для получения размера файла. Но он ограничен 2 ГБ = 31 бит. Что соответствует FileSize аргумент DwinsHs_Check:

#define ExeSize FileSize("..\HelpNDoc\CHM\Output\PublicTalksHelpDocumentationSetup.exe")

Check: DwinsHs_Check( ExpandConstant('{tmp}\HelpDocSetup.exe'), '{#HelpDocSetupURL}', \
       'My_Setup', 'Get', {#ExeSize}, 0)

Если теоретически размер файла может превышать 2 ГБ, вам придется использовать другие средства для получения размера файла - например, путем вызова кода PowerShell с Exec функция препроцессора. И вы должны сразу разделить размер на две части в коде PowerShell (или другом), так как препроцессор Inno Setup в любом случае не может работать с 64-разрядными числами.

Примеры вызова кода PowerShell и возврата его результатов см.:

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