| Предыдущий | Следующий |
| 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. Исправление для этого результата должно затрагивать только компонент, поставщика, документ, устройство или конфигурацию, на которые указывают собранные данные.
Ссылки
- Microsoft: общие коды ошибок COM и OLE — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: IOleObject — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: интерфейсы OLE и передачи данных — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: кэширование представлений OLE — официальная документация Microsoft, относящаяся к этому HRESULT.
Нужно найти другой код? Найти другой код состояния или ошибки.