Что означает код HRESULT 0x80040005 (OLE_E_NOTRUNNING)?

 
Также может означать:
КонстантаТипОС
TAPI_E_OPERATIONFAILEDHRESULTWindows
Предыдущий Следующий
TAPI_E_INVALIDMEDIATYPE TAPI_E_OPERATIONFAILED

OLE_E_NOTRUNNING

OLE object должен быть запущен для запрошенной операции

это HRESULT 2147745797 (0x80040005) из winerror.h. AllStat описывает его как «Для выполнения операции необходимо запустить объект». Результат относится к операции IOleObject или link, требующей активного серверного процесса. Эта константа полезен только вместе с методом и фазой жизненного цикла, где объект загружен или представлен handler, но его сервер не находится в состоянии running.

Решающее значение OLE_E_NOTRUNNING состоит в том, что объект загружен или представлен handler, но его сервер не находится в состоянии running. для этого результата, бит severity сам по себе не определяет обработку; решающий факт — объект загружен/представлен handler, но сервер не running. Надёжная диагностика этого результата сохраняет исходное значение и восстанавливает это состояние.

Где появляется результат

  • Этот HRESULT может возникать в контейнерах compound document, встроенных и связанных объектах, при OLE-активации, advising, кэшировании, преобразовании и сохранении.
  • Привяжите сбой к одной конкретной операции среди IOleObject, IOleLink, IOleCache, IAdviseSink, IPersistStorage, IOleInPlaceObject, moniker, verb и callback client site.
  • Сохраните CLSID, идентичность объекта и client site, storage или moniker, cookie advise, verb, состояние активации, поколение окна и формат представления до освобождения или замены объекта, вернувшего этот HRESULT.

Запись об инциденте для этого результата должна различать вызывающий код, runtime, поставщика и базовый ресурс, проверяя, что объект загружен, но сервер действительно не находится в состоянии running.

Типичные причины и граница интерпретации

Непосредственная граница контракта конкретна: объект загружен или представлен handler, но сервер не находится в состоянии running. Типичные ветви причин:

  • Контейнер не вызвал OleRun или активирующий verb.
  • Сервер завершился или был остановлен.
  • Статическое presentation ошибочно принято за live object.

Подтвердите ветвь причины отсутствия running-состояния сервера по аргументам вызова, состоянию объекта, метаданным, сведениям об устройстве или трассировкам поставщика.

Данные и телеметрия

  • Запишите этот HRESULT, 0x80040005, имя native-метода, ID процесса и потока, ID операции, сборку компонента, архитектуру и затраченное время.
  • Сохраните поколение объекта, идентичность link или storage, состояние активации, cookie advise, срок жизни окна и формат представления.
  • Сохраните IErrorInfo, расширенный статус поставщика, событие storage или устройства и первый нижележащий сбой, предшествовавший этому HRESULT.
  • Записывайте временные метки и ID операций для этого результата, чтобы callbacks можно было расположить по времени относительно неудачной IOleObject/link-операции, требующей активного серверного процесса.
  • При обработке этого HRESULT, выполняйте unadvise только для активных cookies, освобождайте интерфейсы сервера и site в документированном порядке и сохраняйте storage, если пользователь отменил действие или состояние результата неясно.

Телеметрия для этого результата должна сохранять структурные факты, доказывающие, что сервер загруженного объекта не находится в состоянии running, исключая содержимое, учётные данные, байты firmware, ключи CSS и персональные данные.

Последовательность диагностики

  • Зафиксируйте этот HRESULT на native-границе до того, как framework преобразует его в общее исключение.
  • Определите точное поколение объекта и метод среди IOleObject, IOleLink, IOleCache, IAdviseSink, IPersistStorage, IOleInPlaceObject, moniker, verb и callbacks client site.
  • Докажите решающее условие: объект загружен или представлен handler, но его сервер не находится в состоянии running.
  • Проверяйте вероятные причины независимо: контейнер не вызвал OleRun/активирующий verb; сервер завершился/остановлен; статическое presentation ошибочно принято за live object.
  • Перед очисткой после этого результата, классифицируйте каждый выходной результат как действительный, неизменённый, частичный или с переданным владением.
  • Для этого результата, меняйте по одному кандидату причины — путь активации, жизненный цикл сервера или тип presentation — и воспроизводите на минимальном стенде.

Правильная обработка и восстановление

Для этого результата, основное восстановление — запустить объект через документированный путь активации, затем повторить только операцию, которой требуется live-состояние сервера. Отчёт о OLE_E_NOTRUNNING должен показывать достаточно состояния IOleObject/link-операции, требующей активного сервера, чтобы понять отсутствие running-состояния без отладчика в production.

Компонент, ответственный за этот результат, должен определить идемпотентность, отмену, лимит попыток и согласование для неудачной IOleObject/link-операции. Перед повтором OLE_E_NOTRUNNING.

Практический сценарий

Контейнер запрашивает live-данные у встроенной электронной таблицы, загруженной только из storage; OleRun запускает сервер перед вызовом данных. Зафиксируйте решающее состояние для этого результата и проверьте восстановление на новом поколении объекта или запроса.

Отличие от связанных HRESULT

OLE_E_STATIC означает, что объект намеренно статический и не может стать live server object; этот HRESULT может устраняться активацией. Тесты и телеметрия должны сохранять это различие для этого результата.

Рекомендации разработчикам и администраторам

Разработчикам, обрабатывающим OLE_E_NOTRUNNING следует явно управлять временем жизни объекта и переходами состояния, сохранять native HRESULT и обеспечивать безопасную очистку при частичной инициализации или частичных выходных данных. Создайте небольшой стенд container/server, покрывающий состояния loaded, running, in-place active, UI-active, static, linked и shutdown.

Для этого результата широкие изменения разрешений или совместимости неуместны, если данные об отсутствии running-состояния сервера не указывают на этот слой. Исправление для этого результата должно затрагивать только компонент, поставщика, документ, устройство или конфигурацию, на которые указывают собранные данные.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.