【问题标题】:Problem using large binary segment in OOXML在 OOXML 中使用大型二进制段的问题
【发布时间】:2010-09-13 23:12:50
【问题描述】:

系统说明

使用 OOXML 生成文档的绘图组件。

绘图组件由几个部分组成。 除了 OOXML 文档的接口外,所有部分都用 C++ 作为 exe + dll 编写。 后一个组件是在 C#/.NET 中创建的 COM 组件。主要原因是 .NET 框架包含 System.IO.Packaging。这是一个非常方便的内置工具,用于处理 OOXML 文档。

我们根据模板 OOXML 文档创建一个文档,其中某些点点滴滴被其实际内容替换。

其中一个位是 OLE 服务器组件。基本上,这是 OOXML 文件中的二进制段。为了编写这个二进制段,Packaging 组件显然使用了隔离存储。

问题

写入大于 8MB 的段会导致抛出异常“无法确定域的身份”。

在 C++ 端,此异常包含错误 ISS_E_ISOSTORE (0x80131450)。

我们对此进行了分析,据我们所知,这是一项安全功能,可防止半不受信任的第三方组件通过编写大量文件来完全破坏您的 HD。

然后我们在 .NET/COM 组件中尝试了很多东西(创建自定义 AppDomains,设置属性以获得最大许可,创建我们自己的 Streams 并将它们传递给 Packaging 组件)但每次都会导致相同的异常被扔了。

我们可以做些什么来完成这项工作?

难道当.NET 组件被实例化为COM 组件时,它的AppDomain 总是不受信任的?

【问题讨论】:

    标签: c# .net c++ com openxml


    【解决方案1】:

    您可以尝试自己解压缩包(而不是使用 .NET 包 API),直接写入代表二进制段的文件并再次压缩。

    【讨论】:

      【解决方案2】:

      您应该更改该问题的标题,因为您的问题与 OOXML 无关。

      除此之外:您正在使用什么系统处理 8MB 的数据块,这会导致您的硬盘驱动器损坏?

      【讨论】:

      • 它与 OOXML 没有直接关系,但它使我们无法编写我们想要的 OOXML,因此在这方面它是相关的。我从来没有说过我的系统总共有 8MB 的文件,隔离存储的 .NET 运行时安全功能似乎认为这是一个很好的上限。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 2021-07-10
      • 1970-01-01
      • 2014-11-14
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多