Проблема с использованием большого двоичного сегмента в OOXML

StackOverflow https://stackoverflow.com/questions/148071

  •  02-07-2019
  •  | 
  •  

Вопрос

Описание системы

Компонент печати, использующий OOXML для создания документа.

Графический компонент состоит из нескольких частей.Все части написаны на C++ в формате exe + dll, за исключением интерфейса документа OOXML.Последний компонент представляет собой COM-компонент, созданный на C#/.NET.Основная причина этого заключается в том, что платформа .NET содержит System.IO.Packaging.Это очень удобное встроенное средство для работы с документами OOXML.

Мы создаем документ на основе шаблона документа OOXML, в котором определенные фрагменты заменяются их фактическим содержимым.

Один из этих битов является компонентом OLE-сервера.По сути, это двоичный сегмент файла OOXML.Для записи этого двоичного сегмента компонент Packaging, очевидно, использует изолированное хранилище.

Проблема

Запись сегмента > 8 МБ приводит к выдаче исключения «Невозможно определить идентичность домена».

На стороне C++ это исключение содержит ошибку ISS_E_ISOSTORE (0x80131450).

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

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

Что мы могли бы сделать, чтобы это сработало?

Может ли быть так, что когда компонент .NET создается как компонент COM, его домен приложения всегда не является доверенным?

Это было полезно?

Решение

Вы можете попытаться разархивировать пакет самостоятельно (вместо использования API пакета .NET), записать непосредственно в файл, который представляет двоичный сегмент, и снова заархивировать его.

Другие советы

Вам следует изменить заголовок этого вопроса, поскольку ваша проблема не связана с OOXML.

Кроме этого:в какой системе вы работаете, над которой фрагменты данных размером 8 МБ могут привести к полному переполнению вашего жесткого диска?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top