自动获取SHA256,以便使用Inno Setup 6.1下载文件?

安德鲁·特拉克(Andrew Truckle)

的文档说明了DownloadTemporaryFile有关RequiredSHA256OfFile参数的内容:

如果RequiredSHA256OfFile设置为,它将与下载文件的SHA-256进行比较,如果哈希不匹配,则会引发异常。

如果有错误,将引发异常。否则,返回下载的字节数。如果RequiredSHA256OfFile设置并且返回文件已下载,则返回0

这里的答案中我确定了获取校验和的正确命令行方法是:

CertUtil -hashfile MSAHelpDocumentationSetup.exe SHA256

这是我添加此特定文件到脚本的方式:

AddFileForDownload('{#HelpDocSetupURL}', 'HelpDocSetup.exe');

扩展为:

procedure AddFileForDownload(Url, FileName: string);
begin
    DownloadPage.Add(Url, FileName, '');
    FilesToDownload := FilesToDownload + '      ' + ExtractFileName(FileName) + #13#10;
    Log('File to download: ' + Url);
end;

有没有办法自动化:

  1. 获取我文件的校验和。
  2. 将校验和缓存到字符串中。
  3. 构建脚本时使用该校验和值。

通过自动执行此任务,将提供两个好处:

  • 在复制/粘贴校验和值时最大程度地减少用户错误。
  • 保持校验和更新为最新状态,而无需用户交互。

在带有Pascal脚本的Inno Setup中这可行吗?

马丁·普里克里(Martin Prikryl)

Pascal Script不会帮助您。您需要在编译时使用该值。因此使用预处理器。您确实可以执行certutil但是,在这种情况下,imo使用PowerShell及其Get-FileHashcmdlet更加容易

#define GetSHA256OfFile(FileName) \
  Local[0] = AddBackslash(GetEnv("TEMP")) + "sha256.txt", \
  Local[1] = \
    "-ExecutionPolicy Unrestricted -Command """ + \
    "Set-Content -Path '" + Local[0] + "' -NoNewline -Value " + \
    "(Get-FileHash('" + FileName + "')).Hash" + \
    """", \
  Exec("powershell.exe", Local[1], SourcePath, , SW_HIDE), \
  Local[2] = FileOpen(Local[0]), \
  Local[3] = FileRead(Local[2]), \
  FileClose(Local[2]), \
  DeleteFileNow(Local[0]), \
  LowerCase(Local[3])

然后您可以像这样使用它:

AddFileForDownload(
  '{#HelpDocSetupURL}', 'HelpDocSetup.exe', '{#GetSHA256OfFile("HelpDocSetup.exe")}');

当然,您需要将第三个参数添加到AddFileForDownload函数中并将其传递给TDownloadWizardPage.Add您可能还需要向该文件添加路径,以便预处理器可以找到它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用AsyncTask下载文件

来自分类Dev

使用Laravel从Amazon S3下载文件

来自分类Dev

在iOS 6上使用AFNetworking下载文件

来自分类Dev

使用卷曲下载文件

来自分类Dev

使用ClosedXML下载文件

来自分类Dev

通过inno setup安装时下载文件

来自分类Dev

在Chrome扩展程序中生成已下载文件的md5 / sha1 / sha256哈希

来自分类Dev

使用webapi下载文件

来自分类Dev

如何使用urllib3下载文件?

来自分类Dev

使用AngularJS下载文件

来自分类Dev

使用Django下载文件

来自分类Dev

从网页自动下载文件

来自分类Dev

使用cherrypy下载文件

来自分类Dev

使用Ext JS 6下载文件

来自分类Dev

如何使用Retrofit2下载文件?

来自分类Dev

在提示下使用Struts2下载文件

来自分类Dev

如何在不使用html中的下载标签的情况下创建可下载文件?

来自分类Dev

Inno Setup卸载文件的大小已急剧增加

来自分类Dev

使用FileSaver下载文件

来自分类Dev

SHA256使用Filereader问题将大量文件散列到angular 6中

来自分类Dev

使用Powershell从Adls gen1下载文件不起作用

来自分类Dev

提供Inno Setup下载功能的文件大小

来自分类Dev

我可以选择使用Inno Setup 6.1.1下载的文件是否必须在[Files]部分中?

来自分类Dev

在Inno Setup的漂亮任务对话框窗口中显示有关下载文件的错误哈希值的信息

来自分类Dev

Angular 6:下载文件问题

来自分类Dev

在iOS 6上使用AFNetworking下载文件

来自分类Dev

从网站自动下载文件

来自分类Dev

通过inno setup安装时下载文件

来自分类Dev

在Chrome扩展程序中生成已下载文件的md5 / sha1 / sha256哈希