7

システムの説明

OOXML を使用してドキュメントを生成するプロット コンポーネント。

プロット コンポーネントはいくつかの部分で構成されています。すべての部分は、OOXML ドキュメントへのインターフェイスを除いて、exe + dll として C++ で記述されています。後者のコンポーネントは、C#/.NET で作成された COM コンポーネントです。この主な理由は、.NET フレームワークにSystem.IO.Packagingが含まれているためです。これは、OOXML ドキュメントを処理するための非常に便利な組み込み機能です。

テンプレートの OOXML ドキュメントからドキュメントを作成し、特定の断片を実際のコンテンツに置き換えます。

これらのビットの 1 つは OLE サーバー コンポーネントです。基本的に、これは OOXML ファイル内のバイナリ セグメントです。このバイナリ セグメントを書き込むために、Packaging コンポーネントは分離ストレージを使用しているようです。

問題

8MB を超えるセグメントを書き込むと、「ドメインの ID を判別できません」という例外がスローされます。

C++ 側では、この例外にエラー ISS_E_ISOSTORE ( 0x80131450 ) が含まれています。

これを分析したところ、これはセキュリティ機能であり、信頼できないサードパーティ コンポーネントが巨大なファイルを書き込んで HD を完全に破壊するのを防ぎます。

その後、.NET/COM コンポーネントで多くのことを試しました (カスタム AppDomains の作成、最大許容値の属性の設定、独自のストリームの作成とそれらのパッケージング コンポーネントへの渡し) が、毎回同じ例外がスローされました。

これを機能させるにはどうすればよいでしょうか?

.NET コンポーネントが COM コンポーネントとしてインスタンス化されると、その AppDomain は常に信頼されないのでしょうか?

4

2 に答える 2

2

(.NETパッケージAPIを使用する代わりに)自分でパッケージを解凍し、バイナリセグメントを表すファイルに直接書き込んで、再度zipすることをお勧めします。

于 2008-10-06T12:35:42.357 に答える
1

問題はOOXMLに関連していないため、その質問のタイトルを変更する必要があります。

それ以外:どのシステムで8MBのデータチャンクを使用しているので、ハードドライブを合計するリスクがありますか?

于 2008-09-29T19:29:58.147 に答える