0

引数を使用してSearchIndexerを呼び出す方法はありますか?(または、タイトルの内容を達成する別の方法はありますか?)

さまざまなMSDNの記事を見てみましたが、それらはすべて、ライブラリを使用していることを示唆しているようです。しかし、検索を実行すると、ライブラリをダウンロードしなくても実行されます。

XPの時代には、インデックスサービスのプロパティに移動してクエリを実行できました。Windows7では表示されません。

ありがとう。

4

1 に答える 1

2

クエリの例を次に示します。Windows7SDKを使用しないことに注意してください。

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());
                    }
                }
            }
        }
     }
 }
 }

ただし、これはWindows7SDKのDSearchの例から採用されました。([SDK] \ Samples \ winui \ WindowsSearch \DSearch。[SDK]は通常「C:\ ProgramFiles \ Microsoft SDKs \ Windows\v7.1」です。

SDKを使用すると、SQLクエリをより簡単に作成できます(ただし、柔軟性が少し低下します)ISearchQueryHelper。ただし、そのクラスと関連クラスを使用するには、への参照が必要ですMicrosoft.Search.Interop。これは、Windows7SDKにdllとして含まれていません。ただし、SearchAPI.tlbファイル([SDK] \ Lib内)でTlbImp.exe([SDK] \ bin内のタイプライブラリインポーター)を使用して、dll形式で取得できます。 ここでも説明されています

この投稿が、Windows7以降のWindowsSearchにプログラムで接続する必要がある他の人に役立つことを願っています。

于 2012-01-13T02:09:22.610 に答える