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