系统描述
使用OOXML生成文档的绘图组件。
绘图组件由几个部分组成。
除OOXML文档的接口(interface)外,所有部分均以C++的exe + dll格式编写。
后一个组件是在C#/。NET中创建的COM组件。这样做的主要原因是.NET框架包含System.IO.Packaging。这是用于处理OOXML文档的非常方便的内置工具。
我们从模板OOXML文档中创建一个文档,其中某些零零碎碎的内容被其实际内容代替。
这些位之一是OLE服务器组件。基本上,这是OOXML文件中的一个二进制段。为了编写此二进制段,包装组件显然使用隔离存储。
问题
写入大于8MB的段将导致引发异常“无法确定域的身份”。
在C++方面,此异常包含错误ISS_E_ISOSTORE(0x80131450)。
我们已经分析了此问题,并且据我们所知,这是一项安全功能,可以防止半不信任的第三方组件通过写入大量文件来完全破坏您的HD。
然后,我们在.NET/COM组件中尝试了很多事情(创建自定义AppDomain,设置最大许可性的属性,创建我们自己的流并将它们传递给Packaging组件),但是每次都导致抛出相同的异常。
我们可以做些什么来使这项工作呢?
可能是当.NET组件实例化为COM组件时,其AppDomain始终不受信任吗?
最佳答案
您可以尝试自己解压缩该包(而不是使用.NET包API),直接写到表示二进制段的文件,然后再次将其压缩。
关于c# - 在OOXML中使用大二进制段的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/148071/