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

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

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 в нем говорится:

  • FileSize: LongInt

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

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

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

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

  • FileSizeHigh: LongInt

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

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

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

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


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

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

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

1 Ответ

1 голос
/ 03 июня 2019

Вы можете использовать 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 и возврата егорезультаты см .:

...