Delphi 有没有办法从LoadPackage故障中恢复?

Delphi 有没有办法从LoadPackage故障中恢复?,delphi,packages,Delphi,Packages,我正在编写一个使用SysUtils.LoadPackage动态加载包的程序。其中一些包是第三方的,行为不太好,在调用InializePackage时出现故障 我希望我的程序在这些失败后继续运行。我见过两种不同的行为: 它从包中的某个地方抛出异常并终止 它抛出和异常,并将控制权返回给调用方,但下一次调用LoadPackage时,程序停止响应 关于如何从这些故障中优雅地恢复,您有什么想法吗?这可能会增加您的加载时间,但您可以创建一个程序,该程序只需尝试加载和初始化包,并返回主应用程序可以解释(可能通

我正在编写一个使用SysUtils.LoadPackage动态加载包的程序。其中一些包是第三方的,行为不太好,在调用InializePackage时出现故障

我希望我的程序在这些失败后继续运行。我见过两种不同的行为:

  • 它从包中的某个地方抛出异常并终止
  • 它抛出和异常,并将控制权返回给调用方,但下一次调用LoadPackage时,程序停止响应

  • 关于如何从这些故障中优雅地恢复,您有什么想法吗?

    这可能会增加您的加载时间,但您可以创建一个程序,该程序只需尝试加载和初始化包,并返回主应用程序可以解释(可能通过消息)成功/失败的结果。这样,如果失败,它不会关闭您的主应用程序,但是如果成功,您将加载并初始化包两次


    编辑:作为一种优化,您可以存储特定文件名和包版本的成功/失败信息,以便将来程序的运行速度更快。

    您可以编写自己的包加载器。当你忽略所有的ifdef时,这是一个非常简短的例程。它基本上加载库,验证它是否已加载,然后在try块中调用InitializePackage。如果InitializePackage引发异常,它将再次卸载库。如果您有自己的包加载器,则可以根据需要处理异常


    然而,尽管如此,我同意克雷格的观点,这不一定是个好主意。如果一个包写得太差,以至于在
    初始化
    部分爆炸,这应该非常简单,不会有任何错误,那么您真的希望首先将运行的代码插入到您的程序中吗?最好的办法可能是让第三方开发人员修复损坏的代码。

    并非所有异常都是可恢复的。如果第三方
    LoadPackage
    破坏了应用程序内存,你就完蛋了。这要看情况了。嗯,也许我可以把每个包放在一个单独的进程中。然后,如果进程死掉,主应用程序将继续运行,我并不打算运行有缺陷的包。我只需要加载它们足够长的时间来收集有关它们的信息,以显示给用户。如果包无法加载,它将被标记为不可用。@Kenneth:在这种情况下,您关于在单独进程中托管它们的想法可能是最好的解决方案。