문제

시스템 설명

OOXML을 사용하여 문서를 생성하는 플로팅 구성 요소.

플로팅 구성 요소는 여러 부분으로 구성됩니다. 모든 부품은 OOXML 문서의 인터페이스를 제외하고 Exe+ DLL 's로 C ++로 작성됩니다. 후자의 구성 요소는 C#/. Net에서 생성 된 COM 구성 요소입니다. 이것의 주된 이유는 .NET 프레임 워크에 포함되기 때문입니다. System.io.packaging. 이것은 OOXML 문서를 다루기위한 매우 편리한 내장 시설입니다.

특정 비트와 조각이 실제 콘텐츠로 대체되는 템플릿 OOXML 문서에서 문서를 만듭니다.

이 비트 중 하나는 OLE 서버 구성 요소입니다. 기본적으로 이것은 OOXML 파일 내의 이진 세그먼트입니다. 이 바이너리 세그먼트를 작성하기 위해 포장 구성 요소는 분리 된 스토리지를 사용합니다.

문제

세그먼트> 8MB를 작성하면 "도메인의 신원을 결정할 수 없다"는 예외가 발생합니다.

C ++ 측 에서이 예외에는 ISS_E_ISOSTORE (0x80131450) 오류가 포함되어 있습니다.

우리는 이것을 분석했으며, 우리가 알 수있는 한, 이것은 반영되지 않은 타사 구성 요소가 거대한 파일을 작성하여 HD를 완전히 망치는 것을 방지하는 보안 기능입니다.

그런 다음 .NET/COM 구성 요소에서 많은 것을 시도했습니다 (사용자 정의 앱 도메인 생성, 최대 허용 성 속성을 설정하고, 자신의 스트림을 만들고 포장 구성 요소로 전달 함) 동일한 예외가 발생했을 때마다 발생했습니다.

이 일을하기 위해 무엇을 할 수 있습니까?

.NET 구성 요소가 COM 구성 요소로 인스턴스화되면 AppDomain이 신뢰할 수 없을까요?

도움이 되었습니까?

해결책

.NET 패키지 API를 사용하는 대신 패키지를 직접 압축하려고 시도하고 이진 세그먼트를 나타내는 파일에 직접 쓰고 다시 ZIP를 사용하십시오.

다른 팁

문제가 OOXML 관련이 아니기 때문에 해당 질문의 제목을 변경해야합니다.

그 외에 : 8MB의 데이터 덩어리에서 어떤 시스템을 작업하고 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top