1

拿这个脚本:

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 参数的值将被忽略。

    注意,此参数只能使用数字值,不能使用常量标识符。

  • 文件大小高:LongInt

    FileSize参数一起指定文件大小(以字节为单位)。它将用于计算下载进度和剩余时间。这避免了下载开始之前的延迟,因为脚本不必从服务器获取文件大小。

    该参数指定文件大小的高 31 位,该FileSize参数指定文件大小的低 31 位

    FILESIZE_QUERY_SERVER (0)请注意,如果 FileSize 参数设置为、FILESIZE_UNKNOWN (-1)或,则此参数的值将被忽略FILESIZE_KEEP_FORMER (-2)

    注意,此参数只能使用数字值,不能使用常量标识符。


这个特定的安装文件也在我的电脑上。相对于主 ISS 文件,路径为:

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

我们可以使用 ISPP 提取文件大小并将其拆分为所需的两个参数DwinsHs_Check吗?

4

1 回答 1

1

您可以使用FileSize预处理器功能来检索文件大小。但它仅限于 2GB = 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)

如果文件理论上可能超过 2GB,您将不得不使用其他方法来检索文件大小 - 例如通过调用带有Exec预处理器函数的 PowerShell 代码。而且您应该立即在 PowerShell(或其他)代码中将大小分成两部分,因为 Inno Setup 预处理器无论如何都不能处理 64 位数字。

有关调用 PowerShell 代码并返回其结果的示例,请参阅:

于 2019-06-03T11:07:51.423 回答