본문 바로가기
개발

Windows Vista IE8(베타)의 LCIE

by 솜씨제이 2008. 11. 19.
IE8부터 새롭게 Loosely-Coupled IE (LCIE)라는 것이 기능이 생겼다. IE7에서는 보호 모드 때문에 IE를 실행하면 IE가 바로 실행되는 것이 아니라 ieuser.exe라는 프로세스가 생성되고 낮은 무결성 상태의 iexplore.exe를 실행하게 된다. 아래 그림처럼.


그래서 http://still.tistory.com/10 에서 처럼 프로그램에서 IE를 실행할 때 IWebBrowser2를 얻으려면 약간의 수고가 필요하다. 그런데 이게 IE8에서 아래처럼 바뀐다고 한다.


즉, iexplore.exe 프로세스가 탭과 Extensions 별로 각각의 프로세스를 생성해서 동작하는 형태이다. 덕분에 위의 이상한 방법이 필요 없어졌다. 그냥 CoCreateInstance()로 생성하면 된다. 하지만 IE7은 여전히 위의 방식으로 IWebBrowser2를 얻어와야 하기 때문에 Windows Vista에서 IE7과 IE8을 별도로 처리해줘야만 한다. 처음부터 이렇게 만들었으면 좋았을텐데 역시 Windows Vista와 IE7은 급조한 느낌을 지울 수 없다.

참고로 IE7과 IE8 버전 체크는 ieframe.dll의 파일 버전을 비교해서 하면 된다. DLL에서 익스포트하고 있는 DllGetVersion 함수는 쓰지 말자. 엉뚱한 값(6.0.x.x)에 에러만 난다. 덕분에 삽질을 한 참 했다.

부가적으로 DWebBrowserEvents2에 NewProcess(DISPID_NEWPROCESS 284)라는 이벤트가 새로 생겼다.

void NewProcess(      
    long lCauseFlag,
    IDispatch *pWB2,
    VARIANT_BOOL *Cancel
);
이걸 이용하면 보호 모드가 설정되거나 해제된 IE에서 다른 영역으로 이동하면서 보호 모드가 해제되거나 설정된 IE가 새로 뜨는 것을 감지할 수 있다. 동작은 하는데 베타라서 그런지 pWB2 파라미터 값이 제대로 안 넘어 온다.

IE8은 그래도 MS에서 신경써서 만들고 있는 것 같긴 하다. 그렇지만 이미 사용 중인 IE7은 어떻게 한단 말이냐.

댓글