Estou tentando fazer com que você só possa prosseguir com a instalação no Inno Setup, se fornecer um arquivo cujo hash do conteúdo tenha um valor esperado. O arquivo tem cerca de 40 kilobytes.
Aqui está o código que comentei agora
[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;
E encontrei isso para hashes MD5, mas simplesmente não sei o que fazer aqui e como fazer corretamente o que quero com ele
https://jrsoftware.org/ishelp/index.php?topic=isxfunc_getmd5ofstring
E isso para senhas
https://jrsoftware.org/ishelp/index.php?topic=scriptevents&anchor=CheckPassword
Por favor, alguém com mais experiência pode me ajudar?
Depois de examinar a documentação, foi isso que descobri:
Tive que tornar globais as variáveis que você usou para que os valores inseridos possam ser acessados para o seu caso de uso. Vou explicar o que faz se você não sabe:
Inicializamos primeiro as variáveis que queremos usar, pois se as inicializarmos em uma função/procedimento, elas permanecerão locais e não poderemos acessá-las em nenhum outro lugar.
Em seguida, criamos a página que solicitará o arquivo correto no
InitializeWizard
procedimento. Não fazemos a validação lá.Então validaríamos o arquivo quando o usuário clicasse em “Avançar” na
NextButtonClick
função. Ele recebe um número para o ID da página atual, e cada página tem seu próprio ID (incluindo aquele que você criou), e usamos isso para verificar se estamos na página do prompt do arquivo ou de outra página que não se preocupe em validar. No caso em que a página atual é aquela que criamos, obtemos o caminho do arquivoPage.Values[0]
e o passamos para aGetMD5OfFile
função que recebe o caminho do arquivo e retorna o hash do arquivo (em MD5, é claro). Coloquei-o diretamente dentro daif
instrução para salvar uma linha, mas você também pode usar umaHash
variável separada, se desejar. Naquiloif
declaração, verificamos se o valor retornado corresponde ao hash que desejamos (por motivos legais não fornecerei os hashes aqui). E se for, voltamosTrue
para informar ao Inno Setup para prosseguir, caso contrário, exibimos uma mensagem de erro e voltamosFalse
para informar ao Inno Setup para NÃO prosseguir (e permanecer na página).A solução usa MD5 como hash, já que provavelmente é isso que você queria, mas o MD5 é considerado inseguro agora e não deve mais ser usado. Você deve usar SHA256 usando
GetSHA256OfFile
e verificando seu resultado com o hash SHA256 do arquivo que deseja verificar. O código está comentado, basta remover as duas barras e a linha após.