我正在尝试做到这一点只有在 Inno Setup 上提供具有正确哈希值的文件才能继续安装但我真的不知道我在做什么,因为这是我第一次使用它语言,这对我来说非常混乱
这是我现在注释掉的代码
[Code]
procedure InitializeWizard;
var Page: TInputFileWizardPage;
InputSmbRomPath: String;
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');
Page.Values[0] := ExpandConstant('');
end;
我发现了 MD5 哈希值,但我只是不知道在这里做什么以及如何正确地用它做我想做的事情 https://jrsoftware.org/ishelp/index.php?topic=isxfunc_getmd5ofstring 这是密码 https://jrsoftware.org/ishelp/index.php?topic=scriptevents&anchor=CheckPassword
请问有经验的人可以帮助我吗?
筛选文档后,这就是我想到的:
[Code]
var Page: TInputFileWizardPage;
InputSmbRomPath: String;
procedure InitializeWizard;
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');
Page.Values[0] := ExpandConstant('');
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID = Page.ID then begin
// If GetSHA256OfFile(Page.Values[0]) = '<put in the SHA256 hash here if you''re going to use this>' then
If GetMD5OfFile(Page.Values[0]) = '<put in the MD5 hash here if you''re going to use this>' then
Result := True
else begin
MsgBox('Please select an actual SMB1 rom.', mbError, MB_OK);
Result := False
end;
end else
Result := True;
end;
我必须将您使用的变量设置为全局变量,以便您的用例可以访问输入的值。 如果您不知道,我会解释它的作用:
我们首先初始化要使用的变量,因为如果我们在函数/过程中初始化它们,它们将保留在本地,我们将无法在其他任何地方访问它们。
然后,我们创建一个页面,要求您在
InitializeWizard
过程中提供正确的文件。我们不在那里进行验证。
然后,当用户单击
NextButtonClick
函数中的“下一步”时,我们将验证文件。它接受当前页面 ID 的数字,每个页面都有自己的 ID(包括您创建的 ID),我们用它来检查我们是否位于提示文件的页面或我们不提示的另一页面关心验证。
如果当前页面恰好是我们创建的页面,我们从 Page.Values[0]
获取文件路径并将其传递给 GetMD5OfFile
函数,该函数接收文件路径并返回文件的哈希值(当然是 MD5) 。我将它直接放在 If 语句中以保存一行,但如果您愿意,也可以使用单独的 hash
变量。
在 If 语句中,我们检查返回的值是否与我们想要的哈希值匹配(出于法律原因,我不会在这里为您提供哈希值)
如果是,我们返回 True
告诉 Inno Setup 继续,否则显示错误消息并返回 False
告诉 Inno Setup 不要继续(并留在页面上)。
我希望这会有所帮助,并且没有任何令人困惑的事情,因为这是我在这里的第一个答案。