Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)


BHO 개체는 레지스트리에 등록이 되면, 이후로 탐색기와 인터넷 익스플로러가 실행될 때마다 해당 프로그램의 프로세스 공간으로 로딩이 됩니다.
즉, 잠겨지게 되는 것이죠.

대부분의 경우, BHO 개발동기는 Internet Explorer 에 Plug-in 시키기 위해서인데, 쓸데없이 탐색기에 떠서 말썽이 일어나거나, 탐색기로 인해 컴파일이 안되어서 폴더확장까지 다 해놓은 탐색기를 종료시켜야 하는 상황이 발생합니다.

잠깐 머리를 써보았더니, 해답은 생각보다 간단하더군요.
다음과 같이 구현을 해놓으시면 됩니다.

extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
    if (dwReason == DLL_PROCESS_ATTACH)
    {
        char tempBuf[ 4096 ] = { 0 };
        ::GetModuleFileName( NULL, tempBuf, 4096 );
    
        if ( CStringEx::ciFind( tempBuf, "explorer.exe" ) != -1 )
        {
            // 인터넷 익스플로러가 아닌 탐색기에서 활성화 되는 것이라면.
            // FALSE 를 반환.
            return FALSE;
        }

        _Module.Init(ObjectMap, hInstance, &LIBID_IEXTENDER3Lib);
        DisableThreadLibraryCalls(hInstance);
    }
    else if (dwReason == DLL_PROCESS_DETACH)
        _Module.Term();
    return TRUE; // ok
}


[연관 글]






[최초 등록일: ]
[최종 수정일: 7/23/2003]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2011-04-12 10시45분
세상에나... NoExplorer 라는 레지스트리 설정이 존재하고 있었군요. 이 값을 1로 설정해주면 탐색기에서는 로딩이 되지 않습니다. DllMain 으로 제어하는 것보다 훨씬 낫군요. ^^

Browser Helper Objects for Windows Explorer
; http://blogs.msdn.com/b/ieinternals/archive/2011/04/12/10152315.aspx
정성태

... 181  182  183  184  185  [186]  187  188  189  190  191  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
306정성태2/13/200717118기타: 15. .NET 이 생산성이 높다는 증거(!)
304정성태7/21/200619060VS.NET IDE: 41. 하위 폴더의 모든 프로젝트의 출력물을 제거 (Clean)
305정성태7/21/200618746    답변글 VS.NET IDE: 41.1. 하위 폴더의 모든 프로젝트의 출력물을 제거 (Clean) [1]
303정성태7/20/200616822Team Foundation Server: 12. 사용자 계정 재생성에 따른 Version Control 영향
302정성태8/21/200618360Team Foundation Server: 11. TFS Team Build와 VC++ Project 설정
299정성태7/23/200618816개발 환경 구성: 5. VMWare - VM 생성 화면 캡쳐
300정성태7/15/200623234    답변글 개발 환경 구성: 5.1. VMWare 오류 유형 - The handle is invalid.
301정성태7/18/200618203    답변글 개발 환경 구성: 5.2. VMWare - 사용 후기.
298정성태7/14/200618621개발 환경 구성: 4. VMWare Server를 64bit 운영체제에 설치 시 주의 사항 [2]
296정성태7/10/200627898.NET Framework: 73. [ASP.NET] HTC(DHTML Control Behavior)를 WebResource.axd로 제공하는 방법 [3]
295정성태7/1/200621044VC++: 25. Microsoft National Language Support Downlevel APIs 1.0 사용 방법파일 다운로드1
294정성태6/30/200617636.NET Framework: 72. XSDObjectGen.EXE 기능 개선
293정성태6/29/200619390Team Foundation Server: 10. TFS 버전 컨트롤(TFVC)에 참여시킨 프로젝트의 로컬 경로를 옮기는 방법
290정성태6/26/200616758Team Foundation Server: 9. HTTPS를 통한 Team Server 접근 - 두 번째 이야기 [1]
291정성태6/26/200618115    답변글 Team Foundation Server: 9.1. [선행 작업] HTTPS 를 통한 Team Server 접근 - 두번째 이야기 [1]
292정성태6/26/200617869    답변글 Team Foundation Server: 9.2. TF30177 오류 발생
307정성태8/3/200619535    답변글 Team Foundation Server: 9.3. Team Server 접근 이름을 바꾸는 방법 [1]파일 다운로드1
308정성태2/18/200719174        답변글 Team Foundation Server: 9.4. Team Server HTTPS 접근 완료. ^^ [1]
288정성태6/26/200634054오류 유형: 10. error MSB6006: "aspnet_merge.exe" exited with code 1
286정성태6/23/200622153웹: 4. 웹 사이트 식별자(Identifier) 값 변경
285정성태6/20/200622443오류 유형: 9. [TFS] Report 관련 서비스를 조회할 때 rsErrorImpersonatingUser 오류 메시지 발생 [1]
284정성태6/19/200620148VS.NET IDE: 40. FxCop - IDE 에서 제공해 주는 SuppressMessage 코드
283정성태1/19/200720993Team Foundation Server: 8. 소스 세이프에서 TFS SourceControl 로 마이그레이션 [2]
279정성태12/27/200626358개발 환경 구성: 3. VS.NET 원격 디버깅 [1]
280정성태6/12/200625886    답변글 개발 환경 구성: 3.1. VS.NET 2003 원격 디버깅 설정
281정성태8/11/200627372    답변글 개발 환경 구성: 3.2. VS.NET 2005 원격 디버깅 설정
... 181  182  183  184  185  [186]  187  188  189  190  191  192  193  194  195  ...