Windows Search mint fejlesztési platform
Az új fájlformátumok és adattárak tartalmának és tulajdonságainak indexeléséhez a Microsoft Windows Search bővítményekkel bővíthető.
Mielőtt az új fájlformátumok és adattárak külső fejlesztője lekérheti ezeket a formátumokat és tárolókat a lekérdezési eredményekben a Windows Intézőben, a fejlesztőnek az alábbi három dolgot kell tennie:
- Implementáljon egy Shell-adatforrást a Shell-névtér kibővítéséhez.
- Egy adattár elemeinek elérhetővé tétele (ha új adattárat adnak hozzá, mert indexelni kell).
- Dolgozzon ki egy protokollkezelőt, hogy a Windows Search hozzáférhessen az indexeléshez szükséges adatokhoz.
Ez a témakör a következőképpen van rendszerezve:
- Első lépések
-
Keresési fejlesztési forgatókönyvek áttekintése
- Új adattár hozzáadása
- Új fájlformátum hozzáadása
- Windows keresési eredmények használata
- Kezelők áttekintése
- bővítménytelepítői irányelvek
- Implementátorok megjegyzése
- További erőforrások
- Kapcsolódó témakörök
Kezdetekhez
Mielőtt elkezdené létrehozni a Windows Search-alkalmazást, ne feledje, hogy ennek elsődleges módja egy Shell-adatforrás. A Shell-adatforrás kibővíti a Shell-névteret, és elérhetővé teszi az elemeket egy adattárban. Az adattár elemeit ezután a Windows Search rendszer egy protokollkezelővel indexelheti. A Windows Search shell-adatforrás implementálásával való elérésének közvetett megközelítése előnyben részesített, mivel teljes Shell-funkciókhoz biztosít hozzáférést. Ezzel ésszerű felhasználói élményt biztosít.
Ha azt szeretné, hogy a lekérdezés eredményei megjelenjenek a Windows Intézőben, implementálnia kell egy Shell-adatforrást, mielőtt létrehozna egy protokollkezelőt az index kiterjesztéséhez. Ha azonban minden lekérdezés programozott lesz (például OLE DB-n keresztül), és az alkalmazás kódja értelmezi a Shell helyett, a Rendszerhéj névterét továbbra is előnyben részesíti, de nem szükséges.
A Windows protokollkezelőre van szükség a fájltartalmak, például az adatbázisok elemeinek vagy az egyéni fájltípusok ismeretének megszerzéséhez. Bár a Windows Search képes indexelni a fájl nevét és tulajdonságait, a Windows nem ismeri a fájl tartalmát. Ennek eredményeképpen az ilyen elemek nem indexelhetők és nem tehetők közzé a Windows Shellben. Egyéni protokollkezelő implementálásával ezeket az elemeket közzéteheti. Az elérni kívánt fejlesztői forgatókönyv által azonosított kezelők listájáért tekintse meg Kezelőkáttekintése című témakört.
Keresési fejlesztési forgatókönyvek áttekintése
A Windows Search leggyakoribb fejlesztési forgatókönyvei a következők:
Új adattár hozzáadása
A Windows Search rendszerhéj-adattárára csak akkor van szüksége, ha új adattárat ad hozzá az indexeléshez. Az adattárak olyan adatok adattárai, amelyek a Shell programozási modell számára tárolóként, Shell-adatforrás használatával elérhetővé válnak. Az adattárban lévő elemeket ezután a Windows Search rendszer egy protokollkezelővel indexelheti. A protokollkezelő implementálja a protokollt egy tartalomforrás natív formátumban való eléréséhez. Az ISearchProtocol és ISearchProtocol2 felületek használatával egyéni protokollkezelőt implementálhat az indexelhető adatforrások kibontásához. További információ a Shell-adatforrások létrehozásáról: Az alapszintű mappaobjektum-felületek implementálása.
Új fájlformátum hozzáadása
Ha új egyéni fájlformátumot ad hozzá, szűrőkezelőt vagy tulajdonságkezelőt kell fejlesztenie, de mindkettőt nem. A szűrő az IFilter felület implementációja. Megnyitja az adott fájltípusú fájlokat, és szűri az indexelő tulajdonságait és szövegrészeit. A szűrők fájltípusokhoz vannak társítva, fájlnévkiterjesztések, MIME-típusok vagy osztályazonosítók (CLSID-k) szerint. Bár egy szűrő több fájltípust is képes kezelni, minden fájltípus csak egy szűrővel működik.
A tulajdonságkezelő a fájlban tárolt adatokat strukturált sémává alakítja, amelyet a Windows Intéző, a Windows Search és más alkalmazások felismernek, és elérhetők. Ezek a rendszerek ezután a tulajdonságkezelővel együttműködve írhatnak és olvashatnak tulajdonságokat egy fájlba és onnan. A lefordított adatok közé tartozik a részletek nézete, az információs tippek, a részletek panel, a tulajdonságlapok és így tovább. Minden tulajdonságkezelő egy adott fájltípushoz van társítva, amelyet a fájlnévkiterjesztés azonosít. A következők végrehajtásához szüksége van egy tulajdonságkezelőre:
- Nem indexelt elemtulajdonságok megjelenítése a felhasználói felületen.
- A tulajdonságok írásának támogatása.
A Windows keresési eredményeinek felhasználása
Az alábbi szakaszok a Windows Search-találatok felhasználásának számos módját ismertetik:
- Adatok lekérdezése
- Távoli adattárak (Összevont keresés) lekérdezése
- fájlok és elemek indexelése
- Adattár- indexelése
- Indexelési folyamat kezelése
- A Windows tulajdonságrendszer integrálása Windows Search-alkalmazásokkal
Adatok lekérdezése
A Windows Search és a Windows kombinált tulajdonságrendszerén alapuló alkalmazásokat író fejlesztők alkalmazástól és fájltípustól függetlenül hozzáférhetnek a fájlokhoz és elemekhez. Az alkalmazások kétféleképpen férhetnek hozzá az indexelő adataihoz:
- Az alkalmazások közvetlenül kommunikálnak az OLE DB-vel úgy, hogy windowsos keresési strukturált lekérdezési nyelv (SQL) lekérdezéseket küldenek a Windows Search OLE DB-szolgáltatónak az eredmények lekéréséhez. A lekérdezések manuálisan vagy az ISearchQueryHelper felülettel hozhatók létre az SQL keresési kulcsszavakból és speciális lekérdezési szintaxisból (AQS).
- Az alkalmazások a Shell-rétegen keresztül működnek. A Shell-réteg előnye, hogy más forrásokat is támogat, például a grep-t. Hátránya azonban, hogy nem minden indexelő funkció érhető el.
Egy másik lehetőség a search-ms:// és search:// protokollok használata, amelyek a Windows Intézőben renderelt URL-alapú kereséseket hajtják végre. Ez a beállítás lehetővé teszi a legkönnyebb fejlesztést, de nem ad vissza eredményeket vagy felhasználói beállításokat az eredménynézetből a hívó alkalmazásba. Más protokollokhoz hasonlóan a külső keresőalkalmazások is átvehetik a search-ms:// és search:// protokollokat, ha az alkalmazások megfelelnek a szükséges funkciókészletnek. További információ a lekérdezésről: Lekérdezési folyamat a Windows Search és Az index programozott lekérdezése.
Távoli adattárak lekérdezése (összevont keresés)
A Windows 7-ben és újabb verziókban az összevont keresés egy új keresési szolgáltatót kínál, amely webkiszolgálókon keresztül, az OpenSearch protokollon keresztül lekérdezi a távoli adattárakat, és RSS- vagy Atom XML-hírcsatornákként számbaveszi az eredményeket. A keresési összekötők névtér-csomópontok, amelyek egy keresési szolgáltató használatával szimulálják a mappa viselkedését. A Windows 7 távoli adattáraiba való keresés összevonásáról további információt Összevont keresés a Windows. című cikkben talál.
Fájlok és elemek indexelése
Az indexelt tartalom a Windows Search bővítményeivel támogatott fájl- és adattípusokon, valamint a fájlrendszer mappáinak alapértelmezett belefoglalási és kizárási szabályain alapul. A Windows Searchben található szűrők például több mint 200 általános adattípust támogatnak, beleértve a Microsoft Office-dokumentumokat, a Microsoft Outlook e-maileket (a MAPI protokollkezelővel együtt), az egyszerű szöveges fájlokat, a HTML-t és még sok mást. A natívan támogatott fájltípusok teljes listáját az index tartalmazza.
Az index bővíthető tulajdonságkezelőkkel és szűrőkkel, hogy az új fájlformátumok tartalmát és tulajdonságait elérhetővé tegye az index és a Windows Intéző számára. A szűrők az IFilter felület implementációi. Kétféle szűrő létezik: az egyik az egyes elemekkel, például fájlokkal, a másik pedig a tárolókkal, például mappákkal kommunikál. A szűrők többcélúak, mivel támogatják az adatok, a szövegtartalmak, egyes tulajdonságok és több nyelv adattömbözését.
Ezzel szemben a tulajdonságkezelőknek konkrétabb céljuk van: a fájlnévkiterjesztések által azonosított bizonyos fájltípusok tulajdonságainak felfedése. Egy fájltípus tulajdonságkezelője engedélyezheti a tulajdonságok beolvasását és beállítását, és számba veheti az adott fájltípushoz társított tulajdonságokat. A szűrőkkel ellentétben a tulajdonságkezelők nem támogatják az adatok vagy szövegtartalmak kiírását, a tulajdonságkezelők pedig nem tudják jelezni, hogy a szövegtulajdonságok milyen nyelven vannak, hacsak nem támogatják a tulajdonságok írását.
Adattár indexelése
Az index a protokollkezelőkkel bővíthető, hogy hozzáférést biztosítson a védett adattárakhoz. A nem fájlrendszerbeli adattárakban (például adatbázisokban és e-mail-tárolókban) található fájlok és elemek esetében például egy protokollkezelőnek le kell képeznie egy URL-címről egy streamre. A protokollkezelők opcionálisan meg is határozhatják a megfelelő szűrőket, hogy adatokat nyerjenek ki egy streamből. A szűrők felsorolják az adattár URL-címeit. Az elemek ezután külön-külön indexelhetők a megfelelő szűrő- és/vagy tulajdonságkezelővel. További információ: Index kiterjesztése.
Az indexelési folyamat kezelése
Az alkalmazásfejlesztők különböző felügyeleti felületek használatával szabályozhatják a Windows Search-indexelés hatókörét és gyakoriságát. Ezek az interfészek olyan funkciókat tartalmaznak, amelyekkel hozzáadhatja és eltávolíthatja az indexelő által a módosításokat kereső könyvtárakat, manuálisan értesítheti az indexet az adatok változásairól, ellenőrizheti az indexelő állapotát, és kényszerítheti az adatok egy vagy több adat újraindexelését. További információ: Indexkezelése.
A Windows tulajdonságrendszer integrálása a Windows Search-alkalmazásokkal
A Windows tulajdonságrendszer adatdefiníciók bővíthető olvasási/írási rendszere, amely egységes módot biztosít a Shell-elemek metaadatainak kifejezésére. A Windows Vista és újabb rendszerek windowsos tulajdonságrendszere lehetővé teszi a Shell-elemek metaadatainak tárolását és lekérését. A Shell-elem bármilyen tartalom, például fájl, mappa, e-mail vagy névjegy. A tulajdonság egy Shell-elemhez társított metaadatok önálló darabja. A tulajdonságértékek PROPVARIANT szerkezetként vannak kifejezve.
Számos gyakori elemtípushoz, például fényképekhez, zenékhez, dokumentumokhoz, üzenetekhez, névjegyekhez és fájlokhoz széles körben megtalálható a közös tulajdonságok listája. A fejlesztők saját tulajdonságokat is bevezethetnek a platformon, ha egyetlen meglévő tulajdonság sem felel meg az igényeiknek. További információ az alkalmazások Windows-tulajdonságrendszerrel való integrálásáról: Tulajdonságkezelők fejlesztése.
Kezelők áttekintése
A kezelő egy COM-objektum, amely a Shell-elemek funkcióit biztosítja. A Legtöbb Shell-adatforrás bővíthető rendszert kínál a kezelők elemekhez való kötéséhez. A fájlrendszer mappája például a társításrendszert használja egy adott fájltípus kezelőinek kereséséhez. Minden fájltípushoz szükség van egy adott kezelőre. Az Adobe Acrobat .pdf fájltípushoz egy szűrőkezelőre van szükség, például egy másik szűrőkezelőre van szükség a .doc fájlformátumhoz, és így tovább.
A különböző kezelőknek van némi közös vonásuk. Windows Vista és újabb rendszereken a kezelőnek az alábbi felületek egyikével kell inicializálnia a kezelőt: IInitializeWithStream, IInitializeWithItemvagy IItinitializeWithFile.
Az alábbi táblázat felsorolja a magas szintű fejlesztői feladatokat, az egyes tevékenységekhez szükséges kezelő típusát, és egy hivatkozást tartalmaz az egyes tevékenységek végrehajtásával kapcsolatos fogalmi információkra.
Feladat | Edzőtárs | Elméleti információk |
---|---|---|
Fájl tulajdonságainak elérése indexeléshez | Tulajdonságkezelő |
Tulajdonságkezelők fejlesztése System-Defined egyéni fájlformátumok tulajdonságai |
Vágólapformátumok hozzáadása egy elem adatobjektumához (IDataObject) (Az adatobjektumok húzással és másolással/beillesztéssel kapcsolatos forgatókönyvekben használatosak.) | Adatobjektum-kezelő | Adatkezelők létrehozása |
A helyi menüben gyakran megjelenő elemhez tartozó igék hozzáadása | Helyi menükezelő |
Helyi menükezelők létrehozása Helyi menü testreszabása dinamikus ige |
Fájltípus társítása egy adott ikonnal | Ikonkezelő | Ikonkezelők létrehozása |
Tulajdonságlapok létrehozása felhasználói felületi képekkel és vezérlőkkel, amelyek lehetővé teszik a fájltípussal való egyéni interakciót | Tulajdonságlap-kezelő | tulajdonságlapkezelők |
Elemtípus engedélyezése húzási és másolási/beillesztési forgatókönyvek támogatásához | Drop handler | Shell-objektumok átvitele húzással és vágólap |
Szöveg- és dokumentumtulajdonságok adattömbjeinek kinyerése indexeléshez | Szűrőkezelő | Szűrőkezelők fejlesztése |
Új fájltípus indexelése | Szűrőkezelő, tulajdonságkezelő |
Szűrőkezelők fejlesztése Tulajdonságkezelők fejlesztése |
Adattár tartalmának indexelése | Protokollkezelő | Protokollkezelők fejlesztése |
A Rendszerhéj elem egyszerűsített nézetének előnézete a Windows Intéző előnézeti ablaktábláján | Előzetes verzió kezelője | előzetes kezelők |
Előugró szöveg beírása, amikor egy egér rámutat egy felhasználói felületi objektumra | Infotip kezelő | Shell-bővítménykezelők létrehozása (infotip testreszabása) |
Statikus rendszerkép biztosítása a Shell-elem ábrázolásához | Miniatűr kezelő | miniatűr-kezelők |
Az alábbi táblázat a kezelőket és az egyes kezelőtípusok implementálásának felületeit sorolja fel.
Edzőtárs | Felületek |
---|---|
Drop handler | IDropTarget, IDropTargetHelper, IPersistFile, IShellExtInit |
Adatobjektum-kezelő | IDataObject, IPersistFile |
Szűrőkezelő |
IFilter |
Ikonkezelő |
IExtractIcon Nem kötelező: IPersist, IPersistFile |
Infotip kezelő | IQueryInfo |
Előzetes verzió kezelője | IPreviewHandler |
Tulajdonságkezelő | IPropertyStore |
Protokollkezelő |
IFilter, ISearchProtocol, IUrlAccessor Nem kötelező: ISearchProtocol2, IUrlAccessor2, IUrlAccessor3, IUrlAccessor4 |
Tulajdonságlap-kezelő | IShellExtInit, IShellPropSheetExt |
Helyi menükezelő | IContextMenu, IExplorerCommand, IShellExtInit |
Miniatűr kezelő | IThumbnailProvider |
Jegyzet
A tulajdonságkezelők néha metaadat-kezelőként vannak elvetve. A Shell-adatforrásokat néha Shell-névtérbővítménynek is nevezik. A fájltípus-kezelőt néha Shell-bővítménykezelőnek vagy Shell-bővítménynek is nevezik.
További információ a kezelők létrehozásáról: Shell-bővítménykezelők létrehozása. További információ a tulajdonságokról: Windows tulajdonságrendszer.
Bővítménytelepítői irányelvek
Bővítménytelepítő létrehozásakor kövesse az alábbi irányelveket:
- A telepítőnek az EXE vagy az MSI telepítőt kell használnia.
- A kibocsátási megjegyzéseket meg kell adni.
- Minden telepített bővítményhez létre kell hozni egy Programok hozzáadása/eltávolítása bejegyzést.
- A telepítőnek át kell vennie az aktuális bővítmény által megismert fájltípus vagy -tároló beállításjegyzék-beállításait.
- Ha felülír egy korábbi bővítményt, a telepítőnek értesítenie kell a felhasználót.
- Ha egy újabb bővítmény felülírt egy korábbi bővítményt, a felhasználónak vissza kell tudnia állítani az előző bővítmény funkcióit, és ismét alapértelmezett bővítményként kell használnia az adott fájltípushoz vagy tárhoz.
Megjegyzés a implementátorokhoz
Szűrő- vagy tulajdonságkezelő létrehozása előtt a fejlesztőknek a következőket kell figyelembe venniük:
- Ezek a kezelők olyan folyamaton belüli bővítmények, amelyek olyan folyamatokba vannak betöltve, amelyeket nem szabályoz, például a szűrési démonfolyamatot, a Windows Explorert (grep search) és a külső gazdagépeket, például a Windows Mailet.
- Olyan biztonságos kódot kell írnia, amely elég robusztus ahhoz, hogy kezelni tudja a rendszer támadásához létrehozott fájlformátum tetszőlegesen sérült formáit.
- A bővítmény nem szivároghat ki olyan erőforrásokból, amelyek problémákat okoznak a gazdafolyamatok számára.
- A bővítmény nem összeomlhat, mivel ez a gazdafolyamatokat is összeomlja, és lelassítja a szűrési folyamatot.
- Mivel ezek a kezelők egy háttérrendszer-folyamatban futnak, a rendszer teljesítménykövetelményeinek teljesítéséhez gyorsan, minimálisan felhasznált CPU-val és I/O-val kell teljesíteniük a teljesítményt.
Ezért ezeket a bővítményeket a rendszerszintű kód létrehozása terén jártas fejlesztőknek kell írniuk.
További erőforrások
- További információ a Shell-adatforrások létrehozásáról: Az alapszintű mappaobjektum-felületek implementálása.
- Azoknak az adatforrásoknak, amelyeknek a Rendszerhéj alapértelmezett mappanézet-objektumát (DefView) kell használniuk, tekintse meg Mappanézet implementálása, SHCreateShellFolderView függvényt és SFV_CREATE struktúrát. A Rendszerhéj alapértelmezett rendszermappa nézetobjektumát (DefView) használó adatforrásoknak a következő illesztőket kell implementálniuk: IShellFolder, IShellFolder2, IPersistFolder, IPersistFolder2, és (opcionálisan) IPersistFolder3. Ha a IShellFolder-implementáció nem használja SHCreateShellFolderView a DefView létrehozásához, előfordulhat, hogy a Rendszerhéj nézet objektumának IFolderViewkell.
- ISearchFolderItemFactory a DBFolder néven ismert Shell-adatforrás felhasználóinak elsődleges felülete. A DBFolderrel kapcsolatos további információkért tekintse meg a STR_PARSE_WITH_PROPERTIES konstans leírását Kötés környezeti sztringkulcsok. Lásd még társítási tömbök és IPropertySystem::GetPropertyDescriptionListFromString.
- További információ az OLE DB-ről: OLE DB Programozási áttekintés. Az OLE DB-hez készült .NET-keretrendszer adatszolgáltatójára vonatkozó információkért tekintse meg a System.Data.OleDb Névtér dokumentációját.
- A keresési technológiák közösség által támogatott üzenőfalait a Windows: Keresési fórumokcímű témakörben talál.
- A kapcsolódó kódmintákért lásd Windows Search-kódminták.
Kapcsolódó témakörök
-
Windows Search által támogatott nyelvek
-
Felügyelt kód használata a Shell-adatokkal és a Windows Search