Inno setup 自动获取SHA256以便使用Inno Setup 6.1下载文件?
的文档说明了Inno setup 自动获取SHA256以便使用Inno Setup 6.1下载文件?,inno-setup,checksum,inno-setup-v6,Inno Setup,Checksum,Inno Setup V6,的文档说明了requiredsha256ofile参数: 如果设置了requiredsha256ofile,则会将其与下载文件的SHA-256进行比较,如果哈希不匹配,则会引发异常 如果出现错误,将引发异常。否则,返回下载的字节数。如果设置了requiredsA256ofile,并且文件已下载,则返回0 根据答案,我确定获得校验和的正确命令行方法是: CertUtil -hashfile MSAHelpDocumentationSetup.exe SHA256 这是我如何将此特定文件添加到脚本
requiredsha256ofile
参数:
如果设置了requiredsha256ofile
,则会将其与下载文件的SHA-256进行比较,如果哈希不匹配,则会引发异常
如果出现错误,将引发异常。否则,返回下载的字节数。如果设置了requiredsA256ofile
,并且文件已下载,则返回0
根据答案,我确定获得校验和的正确命令行方法是:
CertUtil -hashfile MSAHelpDocumentationSetup.exe SHA256
这是我如何将此特定文件添加到脚本中的:
AddFileForDownload(“{HelpDocSetupURL}”,“HelpDocSetup.exe”);
扩展至:
procedure AddFileForDownload(Url,文件名:string);
开始
DownloadPage.Add(Url,文件名“”);
FilesToDownload:=FilesToDownload+''+ExtractFileName(文件名)+#13#10;
日志('要下载的文件:'+Url);
结束;
有没有办法自动化:
- 最大限度地减少复制/粘贴校验和值时的用户错误
- 使校验和更新保持最新,无需用户交互
这在使用Pascal脚本的Inno设置中可行吗?Pascal脚本对您没有帮助。您需要在编译时使用该值。所以使用预处理器。您确实可以执行
certutil
。但在我看来,在这种情况下,使用PowerShell及其:
然后你可以像这样使用它:
AddFileForDownload(
“{#HelpDocSetupURL}”、“HelpDocSetup.exe”、“GetSHA256OfFile(“HelpDocSetup.exe”)}”;
当然,您需要将第三个参数添加到AddFileForDownload
函数中,并将其传递到TDownloadWizardPage.add
。您可能还需要向文件添加路径,以便预处理器可以找到它
#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])