개발 플랫폼으로서의 Windows 검색
새 파일 형식 및 데이터 저장소의 내용과 속성을 인덱싱하려면 Microsoft Windows Search를 추가 기능으로 확장해야 합니다.
새 파일 형식 및 데이터 저장소의 타사 개발자가 Windows 탐색기에서 쿼리 결과에 표시할 형식 및 저장소를 가져오기 전에 개발자는 다음 세 가지 작업을 수행해야 합니다.
- Shell 데이터 원본을 구현하여 셸 네임스페이스를 확장합니다.
- 데이터 저장소의 항목을 노출합니다(새 데이터 저장소를 추가하는 경우 인덱싱해야 하므로).
- Windows Search에서 인덱싱을 위해 데이터에 액세스할 수 있도록 프로토콜 처리기를 개발합니다.
이 항목은 다음과 같이 구성됩니다.
시작하기
Windows Search 애플리케이션 만들기를 시작하기 전에 먼저 셸 데이터 원본을 사용하는 것이 좋습니다. 셸 데이터 원본은 셸 네임스페이스를 확장하고 데이터 저장소의 항목을 노출합니다. 그런 다음, 프로토콜 처리기를 사용하여 Windows Search 시스템에서 데이터 저장소의 항목을 인덱싱할 수 있습니다. 셸 데이터 원본을 구현하여 Windows Search에 액세스하는 간접적인 방법은 전체 셸 기능에 대한 액세스를 제공하기 때문에 선호됩니다. 이렇게 하면 합리적인 사용자 환경이 보장됩니다.
Windows 탐색기에 쿼리 결과를 표시하려면 인덱스 확장을 위한 프로토콜 처리기를 만들려면 먼저 셸 데이터 원본을 구현해야 합니다. 그러나 모든 쿼리가 프로그래밍 방식으로(예: OLE DB를 통해) 셸이 아닌 애플리케이션의 코드로 해석되는 경우 셸 네임스페이스는 여전히 선호되지만 필수는 아닙니다.
Windows에서 데이터베이스 또는 사용자 지정 파일 형식의 항목과 같은 파일 내용에 대한 지식을 얻으려면 프로토콜 처리기가 필요합니다. Windows Search는 파일의 이름과 속성을 인덱싱할 수 있지만 Windows에서는 파일의 내용을 알지 않습니다. 따라서 이러한 항목은 Windows 셸에서 인덱싱하거나 노출할 수 없습니다. 사용자 지정 프로토콜 처리기를 구현하여 이러한 항목을 노출할 수 있습니다. 달성하려는 개발자 시나리오로 식별되는 처리기 목록은 처리기 개요를 참조 하세요.
검색 개발 시나리오 개요
Windows Search에서 가장 일반적인 개발 시나리오는 다음과 같습니다.
새 데이터 저장소 추가
인덱싱할 새 데이터 저장소를 추가하는 경우에만 Windows Search용 셸 데이터 저장소가 필요합니다. 데이터 저장소는 셸 데이터 원본을 사용하여 셸 프로그래밍 모델에 컨테이너로 노출될 수 있는 데이터의 리포지토리입니다. 그런 다음, 프로토콜 처리기를 사용하여 Windows Search 시스템에서 데이터 저장소의 항목을 인덱싱할 수 있습니다. 프로토콜 처리기는 기본 형식으로 콘텐츠 원본에 액세스하기 위한 프로토콜을 구현합니다. ISearchProtocol 및 ISearchProtocol2 인터페이스는 사용자 지정 프로토콜 처리기를 구현하여 인덱싱할 수 있는 데이터 원본을 확장하는 데 사용됩니다. 셸 데이터 원본을 만드는 방법에 대한 자세한 내용은 기본 폴더 개체 인터페이스 구현을 참조 하세요.
새 파일 형식 추가
새 사용자 지정 파일 형식을 추가하는 경우 필터 처리기 또는 속성 처리기를 개발해야 하지만 둘 다 개발하지는 않습니다. 필터는 IFilter 인터페이스의 구현입니다. 특정 파일 형식의 파일을 열고 인덱서에 대한 속성 및 텍스트 청크를 필터링합니다. 필터는 파일 이름 확장명, MIME 형식 또는 CLSID(클래스 식별자)로 표시된 대로 파일 형식과 연결됩니다. 하나의 필터가 여러 파일 형식을 처리할 수 있지만 각 파일 형식은 하나의 필터로만 작동합니다.
속성 처리기는 파일에 저장된 데이터를 Windows 탐색기, Windows Search 및 기타 애플리케이션에서 인식하고 액세스할 수 있는 구조화된 스키마로 변환합니다. 그런 다음 이러한 시스템은 속성 처리기와 상호 작용하여 파일에서 속성을 작성하고 읽을 수 있습니다. 번역된 데이터에는 세부 정보 보기, 정보 설명, 세부 정보 창, 속성 페이지 등이 포함됩니다. 각 속성 처리기는 파일 이름 확장명으로 식별되는 특정 파일 형식과 연결됩니다. 다음을 수행하려면 속성 처리기가 필요합니다.
- 인덱싱되지 않은 항목 속성을 UI에 표시합니다.
- 쓰기 속성을 지원합니다.
Windows 검색 결과 사용
다음 섹션에서는 Windows Search 결과를 사용하는 여러 가지 방법을 설명합니다.
- 데이터 쿼리
- 원격 데이터 저장소 쿼리(페더레이션 검색)
- 파일 및 항목 인덱싱
- 데이터 저장소 인덱싱
- 인덱싱 프로세스 관리
- Windows 속성 시스템을 Windows Search 애플리케이션과 통합
데이터 쿼리
결합된 Windows Search 및 Windows 속성 시스템 위에 애플리케이션을 작성하는 개발자는 애플리케이션 또는 파일 형식에 관계없이 파일 및 항목에 액세스할 수 있습니다. 애플리케이션에서 인덱서 데이터에 액세스하는 방법에는 두 가지가 있습니다.
- 애플리케이션은 Windows Search OLE DB 공급자에게 Windows Search 구조적 쿼리 언어(SQL) 쿼리를 전송하여 결과를 검색하여 OLE DB와 직접 통신합니다. 쿼리는 수동으로 또는 ISearchQueryHelper 인터페이스를 사용하여 검색 키워드 및 AQS(고급 쿼리 구문)에서 SQL을 생성하여 생성할 수 있습니다.
- 애플리케이션은 셸 계층을 통해 작동합니다. Shell 계층의 장점은 grep와 같은 다른 원본도 지원한다는 것입니다. 그러나 단점은 모든 인덱서 기능을 사용할 수 없다는 것입니다.
또 다른 옵션은 Windows 탐색기를 통해 렌더링된 URL 기반 검색을 실행하는 search-ms:// 및 search:// 프로토콜을 사용하는 것입니다. 이 옵션은 가장 가벼운 개발을 지원하지만 결과 보기에서 호출 애플리케이션으로 결과 또는 사용자 선택을 반환하지는 않습니다. 또한 다른 프로토콜과 마찬가지로 타사 검색 애플리케이션은 애플리케이션이 필요한 기능 집합을 준수하는 경우 search-ms:// 및 search:// 프로토콜을 인수할 수 있습니다. 쿼리에 대한 자세한 내용은 Windows Search의 쿼리 프로세스 및 프로그래밍 방식으로 인덱스 쿼리를 참조하세요.
원격 데이터 저장소 쿼리(페더레이션 검색)
Windows 7 이상에서 페더레이션된 검색은 OpenSearch 프로토콜을 통해 웹 서버를 통해 원격 데이터 저장소를 쿼리하고 결과를 RSS 또는 Atom XML 피드로 열거하는 새 검색 공급자를 제공합니다. 검색 커넥터는 검색 공급자를 사용하여 폴더 동작을 시뮬레이션하는 네임스페이스 접합입니다. Windows 7의 원격 데이터 저장소에 대한 검색 페더레이션에 대한 자세한 내용은 Windows의 페더레이션 검색을 참조 하세요.
파일 및 항목 인덱싱
인덱싱되는 콘텐츠는 Windows Search에 포함된 추가 기능과 파일 시스템의 폴더에 대한 기본 포함 및 제외 규칙을 통해 지원되는 파일 및 데이터 형식을 기반으로 합니다. 예를 들어 Window Search에 포함된 필터는 Microsoft Office 문서, Microsoft Outlook 전자 메일(MAPI 프로토콜 처리기와 함께), 일반 텍스트 파일, HTML 등 200가지 이상의 일반적인 데이터 형식을 지원합니다. 기본적으로 지원되는 파일 형식의 전체 목록은 인덱스의 포함 내용을 참조하세요.
속성 처리기 및 필터를 사용하여 인덱스를 확장하여 새 파일 형식의 콘텐츠와 속성을 인덱스 및 Windows 탐색기에 노출할 수 있습니다. 필터는 IFilter 인터페이스의 구현입니다. 필터에는 파일과 같은 개별 항목과 상호 작용하는 필터와 폴더와 같은 컨테이너와 상호 작용하는 필터의 두 종류가 있습니다. 필터는 청크 데이터, 텍스트 콘텐츠, 일부 속성 및 여러 언어를 지원한다는 측면에서 다목적입니다.
반면, 속성 처리기는 파일 이름 확장명으로 식별되는 특정 파일 형식의 속성을 노출하는 보다 구체적인 목적을 가지고 있습니다. 파일 형식에 대한 속성 처리기는 가져오기 및 설정 속성을 사용하도록 설정하고 해당 파일 형식과 연결된 속성을 열거할 수 있습니다. 필터와 달리 속성 처리기는 데이터 또는 텍스트 콘텐츠 척을 지원하지 않으며 속성 처리기는 속성 작성을 지원하지 않는 한 텍스트 속성이 있는 언어를 나타내는 방법이 없습니다.
데이터 저장소 인덱싱
전용 데이터 저장소에 대한 액세스를 제공하기 위해 프로토콜 처리기를 사용하여 인덱스를 확장할 수 있습니다. 예를 들어 파일 시스템 이외의 데이터 저장소(예: 데이터베이스 및 전자 메일 저장소)에 포함된 파일 및 항목에는 URL에서 스트림으로 매핑하는 프로토콜 처리기가 필요합니다. 프로토콜 처리기는 스트림에서 정보를 추출하는 데 사용할 올바른 필터를 선택적으로 결정할 수도 있습니다. 필터는 데이터 저장소 URL을 열거합니다. 그런 다음 적절한 필터 및/또는 속성 처리기를 사용하여 항목을 개별적으로 인덱싱합니다. 자세한 내용은 인덱스 확장을 참조하세요.
인덱싱 프로세스 관리
애플리케이션 개발자는 다양한 관리 인터페이스를 사용하여 Windows Search 인덱싱의 범위와 빈도를 제어할 수 있습니다. 이러한 인터페이스에는 인덱서가 변경 내용을 검색하는 디렉터리를 추가 및 제거하고, 데이터 변경 내용을 인덱스에 수동으로 알리고, 인덱서의 상태를 확인하고, 일부 또는 모든 데이터를 강제로 다시 인덱싱하는 기능이 포함됩니다. 자세한 내용은 인덱스 관리를 참조하세요.
Windows 속성 시스템을 Windows Search 애플리케이션과 통합
Windows 속성 시스템은 셸 항목에 대한 메타데이터를 균일하게 표현하는 방법을 제공하는 확장 가능한 데이터 정의 읽기/쓰기 시스템입니다. Windows Vista 이상의 Windows 속성 시스템을 사용하면 셸 항목에 대한 메타데이터를 저장하고 검색할 수 있습니다. 셸 항목은 파일, 폴더, 전자 메일 또는 연락처와 같은 모든 단일 콘텐츠 조각입니다. 속성은 Shell 항목과 연결된 개별 메타데이터 조각입니다. 속성 값은 PROPVARIANT 구조체로 표현됩니다.
사진, 음악, 문서, 메시지, 연락처 및 파일과 같은 다양한 일반적인 항목 유형에 대한 광범위한 공통 속성 목록이 포함되어 있습니다. 또한 개발자는 기존 속성이 요구 사항을 충족하지 않는 경우 플랫폼에 자체 속성을 도입할 수 있습니다. Windows 속성 시스템과 애플리케이션을 통합하는 방법에 대한 자세한 내용은 속성 처리기 개발을 참조 하세요.
처리기 개요
처리기는 셸 항목에 대한 기능을 제공하는 COM(Component Object Model) 개체입니다. 대부분의 셸 데이터 원본은 항목에 처리기를 바인딩하기 위한 확장 가능한 시스템을 제공합니다. 예를 들어 파일 시스템 폴더는 연결 시스템을 사용하여 특정 파일 형식에 대한 처리기를 조회합니다. 모든 파일 형식에 특정 처리기가 필요합니다. 한 필터 처리기는 Adobe Acrobat .pdf 파일 형식에 필요합니다. 예를 들어 .doc 파일 형식 등에 다른 필터 처리기가 필요합니다.
다른 처리기에는 몇 가지 공통성이 있습니다. Windows Vista 이상에서 모든 처리기는 다음 인터페이스 중 하나를 사용하여 처리기를 초기화해야 합니다. IInitializeWithStream, IInitializeWithItem 또는 IItinitializeWithFile.
다음 표에서는 각 작업에 필요한 처리기 유형인 개략적인 개발자 작업을 나열하고 각 작업을 수행하는 방법에 대한 개념 정보에 대한 링크를 제공합니다.
작업 | 처리기 | 개념 정보 |
---|---|---|
인덱싱을 위해 파일의 속성에 액세스 | 속성 처리기 | 속성 처리기 개발 사용자 지정 파일 형식에 대한 시스템 정의 속성 |
항목의 데이터 개체(IDataObject)에 대한 클립보드 형식 추가(데이터 개체는 끌어서 놓기 및 복사/붙여넣기 시나리오에서 사용됩니다.) | 데이터 개체 처리기 | 데이터 처리기 만들기 |
바로 가기 메뉴에 일반적으로 표시되는 항목에 대한 동사 추가 | 바로 가기 메뉴 처리기 | 상황에 맞는 메뉴 처리기 만들기 동적 동사를 사용하여 바로 가기 메뉴 사용자 지정 |
파일 형식을 특정 아이콘과 연결 | 아이콘 처리기 | 아이콘 처리기 만들기 |
파일 형식과의 사용자 지정 상호 작용을 허용하는 UI 그림 및 컨트롤을 사용하여 속성 시트 만들기 | 속성 시트 처리기 | 속성 시트 처리기 |
항목 유형이 끌어서 놓기 및 복사/붙여넣기 시나리오를 지원하도록 설정 | 드롭 처리기 | 끌어서 놓기 및 클립보드를 사용하여 셸 개체 전송 |
인덱싱을 위한 텍스트 및 문서 속성의 청크 추출 | 필터 처리기 | 필터 처리기 개발 |
새 파일 형식 인덱싱 | 필터 처리기, 속성 처리기 | 필터 처리기 개발 속성 처리기 개발 |
데이터 저장소의 콘텐츠 인덱싱 | 프로토콜 처리기 | 프로토콜 처리기 개발 |
Windows 탐색기 미리 보기 창에서 셸 항목의 간소화된 보기 미리 보기 | 미리 보기 처리기 | 미리 보기 처리기 |
마우스가 UI 개체를 가리키면 팝업 텍스트 제공 | 정보 팁 처리기 | 셸 확장 처리기 만들기(Infotip 사용자 지정) |
셸 항목을 나타내는 정적 이미지 제공 | 썸네일 처리기 | 썸네일 처리기 |
다음 표에는 각 유형의 처리기를 구현하기 위한 처리기 및 인터페이스가 나열되어 있습니다.
처리기 | 인터페이스 |
---|---|
드롭 처리기 | IDropTarget, IDropTargetHelper, IPersistFile, IShellExtInit |
데이터 개체 처리기 | IDataObject, IPersistFile |
필터 처리기 | IFilter |
아이콘 처리기 | IExtractIcon 선택 사항: IPersist, IPersistFile |
정보 팁 처리기 | IQueryInfo |
미리 보기 처리기 | IPreviewHandler |
속성 처리기 | IPropertyStore |
프로토콜 처리기 | IFilter, ISearchProtocol, IUrlAccessor 선택 사항: ISearchProtocol2, IUrlAccessor2, IUrlAccessor3, IUrlAccessor4 |
속성 시트 처리기 | IShellExtInit, IShellPropSheetExt |
바로 가기 메뉴 처리기 | IContextMenu, IExplorerCommand, IShellExtInit |
썸네일 처리기 | IThumbnailProvider |
참고 항목
속성 처리기는 경우에 따라 메타데이터 처리기로 kown입니다. 셸 데이터 원본을 셸 네임스페이스 확장이라고도 합니다. 파일 형식 처리기를 셸 확장 처리기 또는 셸 확장이라고도 합니다.
처리기를 만드는 방법에 대한 자세한 내용은 셸 확장 처리기 만들기를 참조 하세요. 속성에 대한 자세한 내용은 Windows 속성 시스템을 참조 하세요.
추가 기능 설치 관리자 지침
추가 기능 설치 관리자를 만들 때 다음 지침을 사용합니다.
- 설치 관리자는 EXE 또는 MSI 설치 관리자를 사용해야 합니다.
- 릴리스 정보를 제공해야 합니다.
- 설치된 각 추가 기능에 대해 프로그램 추가/제거 항목을 만들어야 합니다.
- 설치 관리자는 현재 추가 기능이 이해하는 특정 파일 형식 또는 저장소에 대한 모든 레지스트리 설정을 인수해야 합니다.
- 이전 추가 기능을 덮어쓰는 경우 설치 관리자가 사용자에게 알려야 합니다.
- 최신 추가 기능이 이전 추가 기능을 덮어쓴 경우 사용자는 이전 추가 기능의 기능을 복원하고 해당 파일 형식 또는 저장소에 대한 기본 추가 기능으로 다시 만들 수 있어야 합니다.
구현자에 대한 참고 사항
필터 또는 속성 처리기를 만들기 전에 개발자는 다음을 고려해야 합니다.
- 이러한 처리기는 필터 디먼 프로세스, Windows 탐색기(grep 검색) 및 Windows 메일과 같은 타사 호스트와 같이 제어하지 않는 프로세스에 로드되는 프로세스 내 확장입니다.
- 시스템을 공격하기 위해 만들어진 파일 형식의 임의로 손상된 형식을 처리할 수 있을 만큼 강력한 보안 코드를 작성해야 합니다.
- 추가 기능은 호스트 프로세스에 문제를 발생시키는 리소스를 누수해서는 안 됩니다.
- 또한 호스트 프로세스가 충돌하고 필터링 프로세스가 느려지기 때문에 추가 기능이 충돌하지 않아야 합니다.
- 이러한 처리기는 백그라운드 시스템 프로세스에서 실행되므로 시스템의 성능 요구 사항을 충족하기 위해 최소 CPU 및 I/O를 사용하여 신속하게 수행해야 합니다.
따라서 이러한 추가 기능은 시스템 수준 코드를 만드는 데 전문 지식을 갖춘 개발자가 작성해야 합니다.
추가 리소스
- 셸 데이터 원본을 만드는 방법에 대한 자세한 내용은 기본 폴더 개체 인터페이스 구현을 참조 하세요.
- 셸 기본 시스템 폴더 뷰 개체(DefView)를 사용해야 하는 데이터 원본은 폴더 뷰 구현, SHCreateShellFolderView 함수 및 SFV_CREATE 구조를 참조하세요. 셸 기본 시스템 폴더 뷰 개체(DefView)를 사용하는 데이터 원본은 IShellFolder, IShellFolder2, IPersistFolder, IPersistFolder2 및 (선택적으로) IPersistFolder3 인터페이스 집합을 구현해야 합니다. IShellFolder 구현에서 SHCreateShellFolderView를 사용하여 DefView를 만들지 않는 경우 셸 뷰 개체에 IFolderView가 필요할 수 있습니다.
- ISearchFolderItemFactory 는 DBFolder라고 하는 셸 데이터 원본의 소비자를 위한 기본 인터페이스입니다. DBFolder에 대한 자세한 내용은 바인딩 컨텍스트 문자열 키의 STR_PARSE_WITH_PROPERTIES 상수에 대한 설명을 참조하세요. 연결 배열 및 IPropertySystem::GetPropertyDescriptionListFromString도 참조하세요.
- OLE DB에 대한 자세한 내용은 OLE DB 프로그래밍 개요를 참조 하세요. .NET Framework Data Provider for OLE DB에 대한 자세한 내용은 System.Data.OleDb 네임스페이스 설명서를 참조하세요.
- 검색 기술에 대한 커뮤니티 지원 메시지 보드는 Windows: 검색 포럼을 참조 하세요.
- 관련 코드 샘플은 Windows Search 코드 샘플을 참조 하세요.
관련 항목