다음을 통해 공유


셸을 사용하여 디버깅

이 항목에서는 셸 및 네임스페이스 확장 DLL을 디버그하는 방법을 설명합니다.

디버거에서 셸 실행

확장을 디버그하려면 디버거에서 셸을 실행해야 합니다. 다음 단계를 수행합니다.

  1. 확장의 프로젝트를 디버거에 로드하지만 실행하지는 않습니다.

  2. 셸을 종료합니다.

    • Windows Vista 이상:
      1. 시작 메뉴를 표시합니다.
      2. Ctrl+Shift를 누르고 시작 메뉴의 오른쪽 절반 배경을 마우스 오른쪽 단추로 클릭합니다.
      3. 표시되는 메뉴에서 탐색기 종료선택합니다.
    • Windows XP의 경우:
      1. 시작 메뉴에서 종료를 선택합니다.
      2. Ctrl+Alt+Shift를 누른 상태에서 Windows 종료 대화 상자에서 아니요를 클릭합니다.

    이제 셸이 종료되었지만 디버거를 포함한 다른 모든 애플리케이션이 여전히 실행 중입니다.

  3. Windows 디렉터리의 Explorer.exe 사용하여 확장 DLL을 실행하도록 디버거를 설정합니다.

  4. 디버거에서 프로젝트를 실행합니다. 셸은 평소와 같이 시작되지만 디버거는 셸의 프로세스에 연결됩니다.

셸 확장 실행 및 테스트

별도의 Windows 탐색기 프로세스에서 확장을 실행하고 테스트하여 데스크톱 및 작업 표시줄을 중지하고 다시 시작하지 않도록 할 수 있습니다. 확장을 실행하고 테스트하는 동안 데스크톱 및 작업 표시줄을 계속 사용할 수 있습니다.

이 기능을 사용하려면 레지스트리에 다음 REG_DWORD 항목을 추가합니다.

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  DesktopProcess = 1

이 항목이 적용되려면 로그오프하고 다시 로그온해야 합니다. 이 설정을 사용하면 데스크톱 및 작업 표시줄 창이 하나의 Explorer.exe 프로세스에서 만들어지고 다른 모든 탐색기 및 폴더 창이 다른 Explorer.exe 프로세스에서 열립니다.

이 설정은 확장의 실행 및 테스트를 보다 편리하게 만드는 것 외에도 셸 확장과 관련된 데스크톱을 더욱 강력하게 만듭니다. 이러한 확장(예: 바로 가기 메뉴 확장)은 비데스크톱 Explorer.exe 프로세스에 로드됩니다. 이 프로세스가 종료되면 바탕 화면 및 작업 표시줄은 영향을 받지 않으며 다음 탐색기 또는 폴더 창은 종료된 프로세스를 다시 만듭니다.

DLL 언로드

셸은 사용 횟수가 0이지만 DLL이 일정 기간 동안 사용되지 않은 후에만 DLL을 자동으로 언로드합니다. 이 비활성 기간은 특히 셸 확장 DLL이 디버그되는 경우 허용할 수 없는 긴 시간이 될 수 있습니다. 레지스트리에 다음 정보를 추가하여 비활성 기간을 단축할 수 있습니다.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  AlwaysUnloadDll