Как использовать службу поиска Windows как на локальном, так и на удаленном компьютере?

Я работаю над проектом С# WPF, который может искать файлы по указанным путям к каталогам. Эти пути могут быть как на локальном, так и на удаленном компьютере, поэтому я должен решать их на обоих.

Сначала я пытался использовать запрос с локальным путем, но класс OleDbDataReader возвращает нулевые записи. Я уверен, что я настроил все соответствующим образом, например. Параметры индексирования содержат правильный путь: Параметры индексирования содержат правильный путь- или в проводнике: или в проводнике - и типы файлов содержат txt файл в списке: Типы файлов содержат текстовый файл

Код для локального поиска:

CSearchManager manager = new CSearchManager();
CSearchCatalogManager catalogManager = manager.GetCatalog("SystemIndex");
CSearchQueryHelper queryHelper = catalogManager.GetQueryHelper();
queryHelper.QuerySelectColumns = "System.ItemName,System.FileName,System.Author,System.ItemUrl,System.ItemType";
queryHelper.QueryWhereRestrictions = @"AND SCOPE='file:D:\testIndexing' AND System.FileName LIKE '*.txt'";
string userQuery = "SELECT System.FileName FROM SystemIndex WHERE SCOPE='file:D:\testIndexing' AND System.FileName LIKE '*.txt'";
string sqlQuery = queryHelper.GenerateSQLFromUserQuery(userQuery);

OleDbConnection conn = new OleDbConnection(queryHelper.ConnectionString);
conn.Open();
OleDbCommand command = new OleDbCommand(sqlQuery, conn);
using (OleDbDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        Console.WriteLine(reader.GetString(0));
        Console.WriteLine(reader[0]);
    }
}
conn.Close();

Позже я попытался подключиться к Windows Server. Путь к серверу правильный, потому что я могу просматривать файлы сервера через проводник — это VPN-соединение. Здесь также правильно настроены параметры индексации. Но проблема в том, что я не могу использовать описанный выше метод подключения, потому что метод GetCatalog не поддерживает удаленное подключение, поэтому я попробовал ЭТОТ метод. Я нашел пример, который можно увидеть ниже, но здесь я получил исключение вроде: System.UnauthorizedAccessException: 'Retrieving the COM class factory for remote component with CLSID {[CLSID]} from machine [SERVER NAME] failed due to the following error: 80070005 [SERVER NAME].'

Проблема в том, что когда я пытался добавить CLSID. Я понятия не имею, где я могу получить этот идентификатор, потому что я не нашел конкретного решения для этого. Здесь мне нужна помощь, например, что такое CLSID в моем случае и как его получить?

Код для удаленного поиска:

Guid guid = new Guid("{[CLSID]}"); // this is what I don't know how to provide
Type managerType = Type.GetTypeFromCLSID(guid, "SERVER_NAME", true);
var comManager = Activator.CreateInstance(managerType);
CSearchManagerClass manager = (CSearchManagerClass)System.Runtime.InteropServices.Marshal.CreateWrapperOfType(comManager, typeof(CSearchManagerClass));

CSearchCatalogManager catalogManager = manager.GetCatalog("SERVER_NAME.SystemIndex");
CSearchQueryHelper queryHelper = catalogManager.GetQueryHelper();
queryHelper.QuerySelectColumns = "System.ItemName,System.FileName,System.Author,System.ItemUrl,System.ItemType";
queryHelper.QueryWhereRestrictions = @"AND SCOPE='file:\\SERVER_NAME\path\to\scope' AND System.FileName LIKE '*.txt'";

string userQuery = @"SELECT System.FileName FROM SystemIndex WHERE SCOPE='file:\\SERVER_NAME\path\to\scope' System.FileName LIKE '*.txt'";
string sqlQuery = queryHelper.GenerateSQLFromUserQuery(userQuery);

OleDbConnection conn = new OleDbConnection(queryHelper.ConnectionString);
conn.Open();
OleDbCommand command = new OleDbCommand(sqlQuery, conn);
using (OleDbDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        Console.WriteLine(reader.GetString(0));
        Console.WriteLine(reader[0]);
    }
}
conn.Close();

person Christian    schedule 27.04.2019    source источник