2008-09-29 15 views
7

Descripción del sistemaProblema usando gran segmento binario en OOXML

Un componente de trazado que utiliza OOXML para generar un documento.

El componente de trazado consta de varias partes. Todas las partes están escritas en C++ como exe + dll, con la excepción de la interfaz del documento OOXML. El último componente es un componente COM que se creó en C# /. NET. La razón principal de esto es que el .NET Framework contiene System.IO.Packaging. Esta es una práctica función muy útil para tratar con documentos OOXML.

Creamos un documento a partir de una plantilla de documento OOXML donde ciertos bits y piezas se reemplazan por su contenido real.

Uno de estos bits es un componente del servidor OLE. Básicamente, este es un segmento binario dentro del archivo OOXML. Para escribir este segmento binario, el componente de empaque aparentemente usa almacenamiento aislado.

Problema

Escribir un segmento> Resultados de 8 MB en una excepción ser arrojado "No se puede determinar la identidad del dominio".

En el lado de C++, esta excepción contiene el error ISS_E_ISOSTORE (0x80131450).

Hemos analizado esto y, por lo que podemos decir, esta es una característica de seguridad que impide que un componente de terceros que no son de confianza arruine completamente su HD al escribir archivos inmensos.

Hemos intentado muchas cosas en el componente .NET/COM (creando AppDomains personalizados, estableciendo atributos para la máxima permisividad, creando nuestros propios flujos y pasándolos al componente de embalaje) pero cada vez resultó en el mismo excepción lanzada.

¿Qué podríamos hacer para que esto funcione?

¿Podría ser que cuando el componente .NET se instancia como un componente COM, su AppDomain siempre no es de confianza?

Respuesta

2

Puede intentar descomprimir el paquete usted mismo (en lugar de usar la API del paquete .NET), escribir directamente en el archivo que representa el segmento binario y comprimirlo de nuevo.

1

Debe cambiar el título de esa pregunta ya que su problema no está relacionado con OOXML.

Aparte de eso: ¿en qué sistema está trabajando que 8MB de fragmentos de datos resultan en el riesgo de totalizar su disco duro?

+0

No está directamente relacionado con OOXML, pero nos impide escribir el OOXML que queremos, por lo que está relacionado. Nunca dije que mi sistema fuera totalizado por un archivo de 8MB, la característica de seguridad de tiempo de ejecución .NET para almacenamiento aislado parece pensar que es un buen límite superior. – QBziZ

Cuestiones relacionadas