Inno Setup - CompareStr返回非零,即使字符串相同

时间:2016-03-17 01:07:25

标签: inno-setup pascalscript

function DebugIsEnabled: Boolean;
var
  A: AnsiString;
  U: String;
begin
  AppLoc := RemoveQuotes(CurrentAppLoc(''))
  if Standalone then
    LoadStringFromFile(AppLoc + '\Default.ini', A)
  else
    LoadStringFromFile(AppLoc + '\FrankenStein\Default.ini', A);
  U := A;
  if CompareStr(U, 'IsCombo=TRUE') = 0 then
    Result := True
  else
    Result := False
end;

不知何故,检查功能不能按我需要的方式工作。我无法确定我做错了什么。 CompareStr似乎返回20而不是0。几年前我制作了一个类似的工具,相同的检查功能就像一个魅力(任务被正确显示/隐藏)。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

我的猜测是文件中有一些空格,就像行尾的换行符一样。

在比较之前,尝试使用Trim function修剪所有前导和尾随空格:

U := Trim(A);
if CompareStr(U, 'IsCombo=TRUE') = 0 then

附注:尾随if else语句可简化为:

Result := (CompareStr(U, 'IsCombo=TRUE') = 0);

由于我们可以扣除您的答案,因此您的文件显然是一个INI文件。你从来没有告诉我们!

原始代码加载整个文件。然后它将它视为仅文件中有一行(IsCombo=TRUE)。显然,文件中不仅有一行,至少有节标题[Link]。但是我们怎么能从你的问题中知道呢?

因此,您实际问题的答案是:字符串不一样! U(和A)包含整个文件,而您将其与一个随机选择的文件行。

答案 1 :(得分:-1)

我最终使用了这个。发布所有三张支票,因为我最终没有唱CompareStr(它表现得非常奇怪,并且无法弄清楚我做错了什么)

function DebugIsEnabled: Boolean;
var
  A: AnsiString;
  U: String;
begin
if Standalone then
  AppLoc := RemoveQuotes(CurrentAppLoc(''))
else
  AppLoc := RemoveQuotes(CurrentAppLoc('')) + '\FrankenStein\';
    result := GetIniString('Link', 'IsCombo', 'TRUE', AppLoc + 'Default.ini') = 'TRUE'
end;

function VidIsEnabled: Boolean;
var
  A: AnsiString;
  U: String;
begin
if Standalone then
  AppLoc := RemoveQuotes(CurrentAppLoc(''))
else
  AppLoc := RemoveQuotes(CurrentAppLoc('')) + '\FrankenStein\';
  result := IniKeyExists('Section', 'Key', AppLoc + 'Base.ini')
end;

function UmbrellaIsEnabled: Boolean;
var
  A: AnsiString;
  U: String;
begin
if Standalone then
  AppLoc := RemoveQuotes(CurrentAppLoc(''))
else
  AppLoc := RemoveQuotes(CurrentAppLoc('')) + '\FrankenStein\';
  result := GetIniString('Config', 'Umbrella',  true', AppLoc + 'Default.ini') = 'true'
end;

关于Log,我从未使用过,所以我无法弄清楚如何触发它。我知道它很蹩脚,但是......