的文档说明了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;
有没有办法自动化:
通过自动执行此任务,将提供两个好处:
在带有Pascal脚本的Inno Setup中这可行吗?
Pascal Script不会帮助您。您需要在编译时使用该值。因此使用预处理器。您确实可以执行certutil
。但是,在这种情况下,imo使用PowerShell及其Get-FileHash
cmdlet更加容易:
#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] 删除。
我来说两句