如果在此代码中调用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;
答案 0 :(得分:0)
已经提到了事先检查文件是否存在的可能性。
用户TLama提到问题中的代码不是常规的pascal程序代码,而是Inno Setup脚本代码,而且我的答案在这种情况下不适用。因为以下文本可能对pascal程序员感兴趣,所以我们保留它。
EXCEPT
语句本身不处理异常,它只标记在发生错误后程序执行应该继续的点。如果未在EXCEPT ... END
块中处理/捕获异常,则会将其转移到下一个更高的EXCEPT
语句。 (Freepacal参考指南第17章)
我也不认为TRY ... EXCEPT ... FINALLY ... END
会起作用。 EXCEPT
或FINALLY
,而不是两者。
如果要捕获异常,则必须执行以下操作:
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 ..
可以捕获任何异常,但我不建议将该变量用于明确的程序。