我试图做到这一点,以便您只能在 Inno Setup 中继续安装,如果您提供的文件的内容哈希值具有预期值。该文件大约 40 KB。
这是我现在注释掉的代码
[Code]
procedure InitializeWizard;
var Page: TInputFileWizardPage;
begin
Page := CreateInputFilePage(wpWelcome,
'Select SMB1 ROM file', 'A legally obtained SMB1 rom is required to proceed & get access to this port',
'Click "Browse..." and select your SMB1 ROM file, then click Next.');
Page.Add('&SMB1 ROM file:',
'.NES|*.nes|.NEZ|*.nez|.UNF|*.unf|.UNIF|*.unif',
'.nes');
end;
我发现了 MD5 哈希值,但我只是不知道在这里做什么以及如何正确地用它做我想做的事情
https://jrsoftware.org/ishelp/index.php?topic=isxfunc_getmd5ofstring
这是密码
https://jrsoftware.org/ishelp/index.php?topic=scriptevents&anchor=CheckPassword
请问有比较有经验的人可以帮帮我吗?
在仔细阅读文档后,我得出以下结论:
我必须将您使用的变量设置为全局变量,以便您的用例可以访问输入的值。如果您不知道,我将解释它的作用:
我们首先初始化要使用的变量,因为如果我们在函数/过程中初始化它们,它们将保留在本地,我们将无法在其他任何地方访问它们。
然后,我们创建一个页面,要求您在
InitializeWizard
过程中提供正确的文件。我们不在那里进行验证。然后,当用户在函数中单击“下一步”
NextButtonClick
时,我们将验证该文件。它接受一个数字作为当前页面的 ID,每个页面都有自己的 ID(包括您创建的 ID),我们用它来检查我们是否处于文件提示的页面或我们不存在的另一页面关心验证。如果当前页面恰好是我们创建的页面,我们会从中获取文件路径Page.Values[0]
并将其传递给GetMD5OfFile
函数,该函数接受文件路径并返回文件的哈希值(当然是 MD5)。我将它直接放在if
语句中以保存一行,但Hash
如果您愿意,也可以使用单独的变量。在那里面if
声明中,我们检查返回的值是否与我们想要的哈希值匹配(出于法律原因,我不会在这里为您提供哈希值)。如果是,我们返回True
告诉 Inno Setup 继续,否则显示错误消息并返回False
告诉 Inno Setup 不要继续(并停留在页面上)。该解决方案使用 MD5 作为其哈希值,因为这可能是您想要的,但 MD5 现在被认为是不安全的,不应再使用。您应该使用 SHA256,通过使用
GetSHA256OfFile
并对照要验证的文件的 SHA256 哈希值检查其结果。它的代码已被注释掉,只需删除两个斜杠及其后面的行即可。