2011-04-06 7 views
1

Firefox 및 Chrome에서 ff-activex-host를 사용하여 .NET ActiveX 컨트롤을 호스팅하고 있습니다. 등록 된 COM 컨트롤을 인스턴스화하거나 cab 파일에 다운로드 한 다음 등록하고 COM 컨트롤을 인스턴스화합니다. 불행히도, 첫 번째 의미는 서버의 변경 사항으로 컨트롤의 dll을 업데이트 할 수없고 두 번째는 관리자 권한이 필요하다는 것을 의미합니다.COM 컨트롤 다운로드 및 인스턴스화

dll을 다운로드하고 관리자 권한없이 인스턴스화 할 수 있도록 플러그인을 확장하고 싶습니다. 그러나 어떻게해야하는지 잘 모르겠습니다. 누구든지이 일을 한 예가 있습니까?

전적으로 COM 레이어를 건너 뛰고 기본 .NET 컨트롤을 인스턴스화하면 좋겠지 만 플러그인의 일부를 다시 작성해야한다는 것을 알게되고 찾을 수 있었던 예제는 통신 방법은 어쨌든 COM을 통해 이루어집니다. COM없이 .NET 구성 요소와 상호 작용하는 C++ 예제를 가르쳐 주시겠습니까? 내가 찾을 수있는 가장 좋은 것은 ExecuteInDefaultAppDomain인데, 이는 꽤 제한적으로 보입니다 - 나는 이벤트 핸들러도 첨부 할 수 있기를 바랍니다.

답변

0

불행하게도, COM DllRegisterServer 진입 점은 일반적으로 하드 불가능 관리자 권한없이 설치하고, HKEY_LOCAL_MACHINE\Software\Classes에서 생성되는 그들가 발생합니다 HKEY_CLASSES_ROOT 하이브로 구성 요소 등록을 설치하도록 코딩되어있다.

미리 COM 등록이 생성된다는 것을 알고있는 경우 DllRegisterServer을 호출하는 대신 HKEY_CURRENT_USER\Software\Classes에 직접 키를 만들 수 있습니다. 이렇게하면 관리자 권한없이 현재 사용자에 대한 컨트롤을 등록 할 수 있습니다.

가능하면 피하기를 권하는 또 다른 옵션은 트리에 쓰기를 DllRegisterServer 리디렉션하도록 메모리에 Windows 레지스트리 API를 패치하는 것입니다. 이 방법이 효과적 일지는 몰라도, 그러한 API를 패치하는 것은 특별한 일이 아닙니다. 특히 다중 스레드 응용 프로그램에서 수행하는 경우 더욱 그렇습니다.