忽略错误处理的错误消息?

时间:2014-11-23 02:01:29

标签: installer inno-setup pascal uninstaller pascalscript

如果在此代码中调用LoadVCLStyle_UnInstall函数时 uninstall.vsf 文件不存在,我如何忽略错误msgbox?

我认为使用尝试块,空就足够了,就像其他语言一样,但事实并非如此。

// Import the LoadVCLStyle function from VclStylesInno.DLL
procedure LoadVCLStyle_UnInstall(VClStyleFile: String); external 'LoadVCLStyleA@{app}\uninstall.dll stdcall uninstallonly';

//E: Occurs when the uninstaller initializes.
function InitializeUninstall: Boolean;
begin

  Result := True;

  // Initialize the VCL skin style.
  try
    LoadVCLStyle_UnInstall(ExpandConstant('{app}\uninstall.vsf'));
  except 
  finally
  end;

end;

enter image description here

1 个答案:

答案 0 :(得分:0)

已经提到了事先检查文件是否存在的可能性。

用户TLama提到问题中的代码不是常规的pascal程序代码,而是Inno Setup脚本代码,而且我的答案在这种情况下不适用。因为以下文本可能对pascal程序员感兴趣,所以我们保留它。

EXCEPT语句本身不处理异常,它只标记在发生错误后程序执行应该继续的点。如果未在EXCEPT ... END块中处理/捕获异常,则会将其转移到下一个更高的EXCEPT语句。 (Freepacal参考指南第17章)

我也不认为TRY ... EXCEPT ... FINALLY ... END会起作用。 EXCEPTFINALLY,而不是两者。

如果要捕获异常,则必须执行以下操作:

TRY
  LoadVCLStyle_UnInstall(ExpandConstant('{app}\uninstall.vsf'));
EXCEPT 
  On EWhateverException DO ...;
END;

如果文档中未定义此错误的异常类,则可以使用以下技巧查找异常类名称:

TRY
  LoadVCLStyle_UnInstall(ExpandConstant('{app}\uninstall.vsf'));
EXCEPT 
  ON Exception DO WriteLn(ExceptObject.ClassName);
END;

使用ON Exception DO ..可以捕获任何异常,但我不建议将该变量用于明确的程序。