2008-09-29 8 views
7

Description du systèmeproblème en utilisant un grand segment binaire dans OOXML

Un composant traçante qui utilise OOXML pour générer un document.

Le composant de traçage se compose de plusieurs parties. Toutes les parties sont écrites en C++ comme exe + dll, à l'exception de l'interface du document OOXML. Ce dernier composant est un composant COM créé en C#/.NET. La raison principale de ceci est que le framework .NET contient System.IO.Packaging. C'est une installation intégrée très pratique pour traiter les documents OOXML.

Nous créons un document à partir d'un document modèle OOXML où certains éléments sont remplacés par leur contenu réel.

L'un de ces bits est un composant OLE Server. Fondamentalement, il s'agit d'un segment binaire dans le fichier OOXML. Pour écrire ce segment binaire, le composant Packaging utilise apparemment un stockage isolé.

Problème

Ecrire un segment> Résultats de 8Mo à une exception levée « Impossible de déterminer l'identité du domaine ».

Du côté C++, cette exception contient l'erreur ISS_E_ISOSTORE (0x80131450).

Nous avons analysé cela et, autant que nous le sachions, c'est une fonctionnalité de sécurité qui empêche les composants tiers semi-non fiables de ruiner complètement votre HD en écrivant des fichiers immenses. Nous avons ensuite essayé beaucoup de choses dans le composant .NET/COM (créer des domaines d'application personnalisés, définir des attributs pour une permissivité maximale, créer nos propres flux et les transmettre au composant Packaging) mais chaque fois il en résultait le même exception étant jeté.

Que pourrions-nous faire pour que cela fonctionne?

Se pourrait-il que lorsque le composant .NET est instancié en tant que composant COM, son AppDomain est toujours non approuvé?

Répondre

2

Vous pouvez essayer de décompresser le package vous-même (au lieu d'utiliser l'API du package .NET), écrire directement dans le fichier qui représente le segment binaire et le compresser à nouveau.

1

Vous devez modifier le titre de cette question car votre problème n'est pas lié à OOXML. A part ça, sur quel système travaillez-vous pour que des blocs de données de 8 Mo puissent entraîner le total de votre disque dur?

+0

Il n'est pas directement lié à OOXML, mais il nous empêche d'écrire le OOXML que nous voulons, donc à cet égard, il est lié. Je n'ai jamais dit que mon système était totalisé par un fichier de 8 Mo, la fonctionnalité de sécurité d'exécution de .NET pour le stockage isolé semble penser que c'est une bonne limite supérieure. – QBziZ