c# - 在 OOXML 中使用大二进制段的问题

标签 c# .net c++ com openxml

系统说明

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

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

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

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

问题

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

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

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

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

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

会不会是.NET组件实例化为COM组件时,其AppDomain始终不受信任?

最佳答案

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

关于c# - 在 OOXML 中使用大二进制段的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/148071/

相关文章:

c# - 如何使用我的 InstanceProvider 使用自己的构造函数调用 WCF 服务

c# - 蓝牙串行端口 (SPP) 传入端口创建

c++ - 错误:无法转换为简单的 std::string 文件 slurper

c# - 使用 JsonConverterAttribute 装饰类时使用默认的 JsonSerializer

c# - 从远程计算机简单绑定(bind)到 AD-LDS 失败

c++ - Windows.h错误

c++ - 使用 boost::geometry::buffer 函数

c# - 在 mvc 中使用 dapper 的动态结果

c# - 如何提供 ProjectItem.get_FileNames(i) 的实现?

c# - 在 DrawText win32 函数中设置格式