Что означает код HRESULT 0x8004000C (OLE_E_PROMPTSAVECANCELLED)?

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

OLE_E_PROMPTSAVECANCELLED

Пользователь отменил запрос OLE на сохранение

это HRESULT 2147745804 (0x8004000C) из winerror.h. AllStat описывает его как «Пользователь отменил диалог сохранения». Результат относится к закрытию, деактивации или обновлению OLE object, при котором был показан запрос сохранить изменения. Для этого результата важно установить не просто факт незавершения, а что операция остановлена явной отменой решения о сохранении пользователем.

Решающее значение OLE_E_PROMPTSAVECANCELLED состоит в том, что операция остановлена, потому что пользователь явно отменил решение о сохранении. для этого результата, бит severity сам по себе не определяет обработку; решающий факт — пользователь явно отменил решение о сохранении. Интерпретируйте этот HRESULT на native-границе до того, как wrapper скроет это условие.

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

  • Этот 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, поставщика и базовый ресурс, проверяя, что остановка действительно вызвана явной отменой пользователем.

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

Непосредственная граница контракта конкретна: операция остановлена из-за явной отмены решения о сохранении. Типичные ветви причин:

  • Пользователь выбрал Cancel в запросе сервера.
  • Автоматизация запустила интерактивный процесс сохранения.
  • Политика shutdown не определяет обработку изменённых встроенных данных.

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

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

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

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

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

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

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

Для этого результата, основное восстановление — сохранить изменённый объект и вернуть управление пользователю; не зацикливайте запрос и не отбрасывайте изменения автоматически. Отчёт о OLE_E_PROMPTSAVECANCELLED должен показывать достаточно состояния закрытия, деактивации или обновления OLE object с запросом сохранения, чтобы понять явную отмену без отладчика в production.

Повторяйте операцию только если данные показывают, что состояние после решения пользователя может измениться и операция допускает повтор. Перед повтором OLE_E_PROMPTSAVECANCELLED.

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

При закрытии документа появляется запрос о сохранении правок внутри embedded object; Cancel оставляет открытыми и документ, и сервер. Зафиксируйте решающее состояние для этого результата и проверьте восстановление на новом поколении объекта или запроса.

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

OLE_E_CANTCONVERT и сбои storage — технические ошибки; OLE_E_PROMPTSAVECANCELLED представляет намеренное решение пользователя. Тесты и телеметрия должны сохранять это различие для этого результата.

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

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

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

Ссылки


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