Поиск Windows 7 программно без использования библиотеки SDK - PullRequest
0 голосов
/ 28 декабря 2011

Есть ли способ вызвать SearchIndexer с аргументами?(или есть другой способ выполнить то, что написано в названии?)

Я пытался просмотреть различные статьи MSDN, но все они, похоже, подсказывали, что я использую библиотеку.Но когда я запускаю поиск, он запускается без загрузки какой-либо библиотеки.

Еще во времена XP вы могли перейти к свойствам службы индексирования и выполнить запрос.Я не вижу этого в Windows 7.

Спасибо.

1 Ответ

2 голосов
/ 13 января 2012

Вот пример запроса.Обратите внимание, что он не использует Windows 7 SDK.

using System;
using System.Data.OleDb;

namespace FileSearchingExe
{
class MainProgram
{
    static void Main(string[] args)
    {     
string sqlQuery = "SELECT TOP 10 \"System.ItemPathDisplay\", \"System.DateModified\" FROM \"SystemIndex\" WHERE CONTAINS(*,'\"urSearchWord*\"') " +
            "AND scope='file:C:/SomeFolder' ORDER BY System.ItemPathDisplay DESC"; //note the forwardslash in the scope parameter.

        // --- Perform the query ---
        // create an OleDbConnection object which connects to the indexer provider with the windows application
        using (System.Data.OleDb.OleDbConnection conn = new OleDbConnection("provider=Search.CollatorDSO.1;EXTENDED PROPERTIES=\"Application=Windows\""))//queryHelper.ConnectionString))
        {
            // open the connection
            conn.Open();

            // now create an OleDB command object with the query we built above and the connection we just opened.
            using (OleDbCommand command = new OleDbCommand(sqlQuery, conn))
            {
                // execute the command, which returns the results as an OleDbDataReader.
                using (OleDbDataReader WDSResults = command.ExecuteReader())
                {
                    while (WDSResults.Read())
                    {
                        // col 0 is our path in display format

                        Console.WriteLine("{0}, {1}", WDSResults.GetString(0), WDSResults.GetDateTime(1).ToString());
                    }
                }
            }
        }
     }
 }
 }

Однако он был адаптирован из примера DSearch в Windows 7 SDK.([SDK] \ Samples \ winui \ WindowsSearch \ DSearch. [SDK] обычно представляет собой «C: \ Program Files \ Microsoft SDK \ Windows \ v7.1»

Обратите внимание, что вы можете сделать запрос SQL более простым(но немного менее гибкий imo), если вы используете SDK * 1006. * Однако, чтобы использовать этот класс и связанные с ним классы, вам нужно иметь ссылку на Microsoft.Search.Interop, который не включен в Windows 7 SDK как DLL. Однако вы можетеполучите его в виде dll, используя TlbImp.exe (импортер библиотек типов, в [SDK] \ bin) в файле SearchAPI.tlb (в [SDK] \ Lib). Также описано здесь .

Надеюсь, этот пост поможет всем, кому необходимо программно подключиться к поиску Windows в Windows 7 или выше.

...