0

를 인스턴스화 할 수있는 COM-볼 수 .NET 객체 등록이없는 활성화 컨텍스트 API를 사용하여. http://msdn.microsoft.com/en-us/library/ms973913.aspx는 실버 라이트 구성 요소는 우리는 실버 라이트 IE에서 실행 5.0 구성 요소를로드하려고 등록이 필요없는 COM-볼 수 .NET 개체

http://msdn.microsoft.com/en-us/library/gg192793(v=vs.95).aspx에 설명 된대로 SilverLight 구성 요소가 브라우저에서 신뢰할 수있는 응용 프로그램으로 실행됩니다.

개체

매니페스트가 제대로 형성되도록 활성화 컨텍스트 API를 사용하여 독립 실행 형 테스트 응용 프로그램에로드 할 수 있습니다. SiverLight 브라우저 내에서 실행에서 는 (의 AppData/LocalLow에서로드) 구성 요소 로더 DLL 만들고 성공적으로 활성화 컨텍스트를 활성화 만의 AppData/LocalLow에서 COM 보이지 .NET 개체 DLL을로드 할 수 없습니다. 결과는 항상 "파일을 찾을 수 없습니다"입니다.

사람은 비슷한 설정 실버 라이트/COM 경험이 있습니까?

TIA

답변

0

나는 마이크로 소프트와 티켓을 제기와 제안 된 솔루션은 실제 활성화 컨텍스트 버그에 대한 해결 방법입니다.

//Create your own activation context pointing to the manifest 

ACTCTX actCtx; 

ULONG_PTR pCtxCookie; 

//initialize actCtx with your manifest name and path 

.... 

HANDLE hActCtx = CreateActCtx(&actCtx); 

ActivateActCtx(hActCtx, &pCtxCookie); 

.... 

//surround EVERY CALL to CreateInstance with the null activation context, otherwise you will get an error on DeactivateActCtx!!! 

ULONG_PTR cookie; //do not reuse the pCtxCookie!!! 

ActivateActCtx(NULL, &cookie); 
HRESULT hr = classA.CreateInstance(__uuidof(SxSNET::SxSClass)); 

DeactivateActCtx(0, cookie); //deactivate the null context 

... 

//deactivate and deallocate your actual manifest based activation context 

DeactivateActCtx(0, pCtxCookie); 

ReleaseActCtx(hActCtx); 

해결책은 작동하지 않습니다. 이 솔루션의 문제점은 null 컨텍스트가 격리 된 컨텍스트를 사용하는 .NET 어셈블리가 아닌 등록 된 버전의 .NET 어셈블리에 강제로 바인딩된다는 것입니다. 때문에 GAC 프로세스의 bin 경로에 모든하지만 매니페스트 위치에 보이지 않는 바인딩 검색 로직의 .NET 어셈블리를 호출 할 때 등록이 필요없는 COM 버그가 있습니다. 마이크로 소프트에 따르면

: 융합 관리되는 COM 구성 요소를 정의하고 구현 된 .NET 어셈블리에 대한 실패 프로빙 때문에

이 오류가 발생합니다. .NET 런타임은 실행 가능한 경로 또는 전역 어셈블리 캐시에 상대적인 파일 만 검색합니다. Reg-Free 관리 COM Interop의 경우 루트 매니페스트 경로를 무시합니다.

나는이 미래에 누군가가 도움이되기를 바랍니다.