gpt4 book ai didi

string - 比较两个字符串 inno setup

转载 作者:行者123 更新时间:2023-12-01 09:21:55 28 4
gpt4 key购买 nike

我想使用以下代码检查文件的 MD5:

[Code]
var
MD5Comp: string;

procedure ExitProcess(uExitCode:UINT);
external 'ExitProcess@kernel32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
begin
MD5Comp := '32297BCBF4D802298349D06AF5E28059';

if CurStep = ssInstall then
begin

if not MD5Comp=GetMD5OfFile(ExpandConstant('{app}\cg.npa')) then
begin
MsgBox('A patched version detected. Setup will now exit.', mbInformation, MB_OK);
ExitProcess(1);
end;
end;
end;

但是在比较两个字符串时出现“类型不匹配”错误,所以我假设这不是您比较它们的方式。

编辑:我试过 if not CompareText(MD5Comp,GetMD5OfFile(ExpandConstant('{app}\cg.npa')))=0但它永远不会执行 if 中的内容。

最佳答案

这似乎是 Pascal Script 编译器的一个异常(exception)。你期待这样的表达式(假设 S1S2string 变量):

if not (S1 = S2) then

但是编译器是这样处理的:
if (not S1) = S2 then

好吧,我个人认为这里会出现编译器错误而不是运行时错误。如果您明确地将该比较括在括号中,则至少您有解决此问题的简单方法,例如:
if not (MD5Comp = GetMD5OfFile(ExpandConstant('{app}\cg.npa'))) then

或者可以选择更字面地写:
if MD5Comp <> GetMD5OfFile(ExpandConstant('{app}\cg.npa')) then

请注意,在这种情况下不需要括号,因为使用 <>运算符它变成一个单一的 bool 表达式。

关于string - 比较两个字符串 inno setup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31648871/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com