Любой способ восстановления после сбоя LoadPackage? - PullRequest
1 голос
/ 25 августа 2011

Я пишу программу, которая динамически загружает пакеты, используя SysUtils.LoadPackage.Некоторые из этих пакетов являются сторонними и не очень хорошо ведут себя, и вызывают сбой при вызове InializePackage.

Я бы хотел, чтобы моя программа продолжала функционировать после этих сбоев.Я видел два разных поведения:

  1. Он генерирует исключение откуда-то в пакете и завершается.
  2. Он генерирует исключение и возвращает управление вызывающей стороне, но в следующий раз LoadPackageпрограмма перестает отвечать на запросы.

Есть идеи, как изящно восстановиться после этих сбоев?

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Это может увеличить время загрузки, но вы можете создать программу, которая просто пытается загрузить и инициализировать пакет и вернуть результат, который ваше основное приложение может интерпретировать (возможно, через сообщение) об успехе / неудаче.Таким образом, если это не удастся, это не приведет к удалению вашего основного приложения, однако, если оно будет успешно выполнено, вы будете загружать и инициализировать пакет дважды.

РЕДАКТИРОВАТЬ: В качестве оптимизации вы можете сохранить успех / неудачу конкретногоимя файла и версия пакета, поэтому последующие запуски программы будут выполняться намного быстрее.

1 голос
/ 26 августа 2011

Вы можете написать свой собственный загрузчик пакетов.Когда вы игнорируете все IFDEF, это очень короткая и простая процедура.Он в основном загружает библиотеку, проверяет, что она загружена, а затем вызывает InitializePackage в блоке try.Если InitializePackage вызывает исключение, он снова выгружает библиотеку.Если бы у вас был собственный загрузчик пакетов, вы могли бы обработать исключение так, как хотели.

Однако, сказав это, я согласен с Крейгом, что это не всегда хорошая идея.Если пакет настолько плохо написан, что он взрывается в разделе initialization, который должен быть настолько простым, чтобы не было никаких ошибок, действительно ли вы хотите, чтобы выполняемый код был подключен к вашей программе?Вероятно, лучше всего попытаться заставить сторонних разработчиков исправить свой испорченный код.

...