2009-03-08 7 views
0

ATL (Visual Studio 2008)을 사용하여 Windows 셸 확장을 만들었습니다. 그것은 다음과 같은 모듈을 가지고 있으며, 자신의 .RGS 등록 신청을 각 모듈은 별도의 ATL 단순 개체 수 있습니다 : -Vista (IShellFolder)의 셸 확장 디버깅 문제

  1. IShellFolder/IShellView -> Windows 탐색기에서 가상 드라이브를 들어
  2. 의 IContextMenu/IShellExtInit -> 팝업의 경우 메뉴 파일 및 폴더
  3. IShellIconOverlayIdentifier는 -> 파일에서 사용자 정의 속성 페이지에 대한 & 폴더의 속성
- 오버레이 파일에 대한 아이콘과 폴더
  • IShellPropSheetExt/IShellExtInit를 표시하려면3210

    위의 작업은 WinXP에서 제대로 작동하며 WinXP에서이 셸 확장을 디버깅 할 수 있습니다. 그러나 Vista로 전환하자마자 (2)와 (4)에 대한 메소드 호출 만받습니다. Windows 탐색기에서 드라이브가 만들어 지지만 클릭하면 기본 메서드가 호출되지 않습니다. 내가 오른쪽 클릭을하면 (2)가 호출되고 파일이나 폴더에 대해 "속성"을 선택할 때 (4)의 코드가 나타납니다.

    Vista에서 (1) 및 (3)에 대해 누락 된 인터페이스가 있습니까? MSDN에서 Vista 용 셸 확장을 작성하는 방법에 대한 완전하고 상세한 설명서를 찾을 수 없었습니다. 쉘 익스텐션에 관한 CodeProject 기사를 이미 읽었습니다.

  • 답변

    0

    확장 프로그램이 초기화를 제대로 처리하는지 확인하십시오. 그렇지 않으면 verclsid.exe로 확장 프로그램이로드되지 않습니다. verclsid.exe는 먼저 셸 확장을로드 한 다음 셸에 '확인'을 보내기 전에 셸 확장을로드하고 그 확장을로드하는 것이 안전하다는 것을 나타냅니다.

    verclsid.exe에 대한 자세한 내용은 here을 참조하십시오.

    +0

    내가 꽤 솔루션 권리를 가져올 수 없습니다. 나는 방화벽의 "허용"목록에 verclsid.exe를 포함 시켰지만 디버깅을 시작할 때 'explorer.exe'를 보여줍니다 : '... \ Debug \ ShellExtension.dll'로드 됨 'explorer.exe': 언로드 '.. . \ Debug \ ShellExtension.dll ' 그리고 중단 점이 맞지 않습니다. – A9S6

    +0

    방화벽과는 아무런 관련이 없습니다. dll init 함수에서 네트워크 기능을 수행하지 않는다면 (결코 * 할 필요가없는). 디버그 창의 "(un) loaded"행이 여기서 도움이되지 않습니다. dll이로드되는 프로세스에서 init 함수를 체크인 할 수 있습니다. – Stefan

    +0

    나는 늦은 답신을 드려 죄송합니다. Init 함수는 dllmain()을 의미합니까? 거기에, 난 많이하고 있지 않다. :: CoInitialize (NULL); if (dwReason == DLL_PROCESS_ATTACH) { _AtlModule.Init(); :: DisableThreadLibraryCalls (hInstance); } hInstance; return _AtlModule.DllMain (dwReason, lpReserved); – A9S6