代码之家  ›  专栏  ›  技术社区  ›  QBziZ

在OOXML中使用大型二进制段时的问题

  •  7
  • QBziZ  · 技术社区  · 16 年前

    系统描述

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

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

    我们用一个模板ooxml文档创建一个文档,其中某些部分被它们的实际内容替换。

    其中一个位是一个OLE服务器组件。基本上,这是OOXML文件中的一个二进制段。对于编写这个二进制段,打包组件显然使用独立的存储。

    问题

    写入段>8MB会导致引发异常“无法确定域的标识”。

    在C++方面,此异常包含错误ISSyeAsISOSt店(0x80131450)。

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

    然后,我们在.NET/COM组件中尝试了很多方法(创建自定义AppDomain、设置属性以获得最大权限、创建自己的流并将这些流传递给打包组件),但每次都会引发相同的异常。

    我们该怎么做才能使这项工作成功?

    当.NET组件被实例化为COM组件时,它的AppDomain是否始终不受信任?

    2 回复  |  直到 16 年前
        1
  •  2
  •   elbandido    16 年前

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

        2
  •  1
  •   xmjx    16 年前

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

    除此之外:你在用什么系统处理8MB的数据块会导致硬盘驱动器的总体风险?