Windows搜索 - 有更好的方法吗?

Obs*_*nix 9 c# windows-search

我要求在给定位置搜索指定内容的文件.这些文件将通过Web应用程序(可能不一定在同一台服务器上)进行搜索,并且应该近乎实时更新.

在浏览了扫描工具/代码之后,我找到了这个答案,表明您可以通过编程方式挂钩Windows内置的Windows搜索功能.

使用下面的代码(或多或少的答案代码和一些小调整),我已经能够在我的机器上成功地完成这项工作:

public class WindowsSearchScanner
{
    private const string Query = @"SELECT System.ItemName FROM SystemIndex WHERE scope ='file:{0}' and FREETEXT('{1}')";

    public void DoSearch(string criteria, string path)
    {
        string connectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            string query = string.Format(Query, path, criteria);
            OleDbCommand command = new OleDbCommand(query, connection);
            connection.Open();

            List<string> result = new List<string>();

            OleDbDataReader reader = command.ExecuteReader();
            int count = 0;
            while (reader.Read())
            {
                result.Add(reader.GetString(0));
                Console.WriteLine(reader.GetString(0));

                count++;
            }
            Console.WriteLine(count + " Records Found");

            connection.Close();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我对此有几个疑问:

  1. 除了使用字符串查询之外,是否有更好的(即更多.Net)方式访问Windows搜索?
  2. 有没有办法参数化文本?我试着直接添加OleDbParameters命令,但显然Collat​​orDSO不支持它.显然,我不想事先清理数据 - 比如SQL注入,我可能会错过一些会导致问题的潜在途径

    string query = @"SELECT System.ItemName FROM SystemIndex WHERE scope ='file:' + @path and FREETEXT(@text)";
    OleDbCommand command = new OleDbCommand(query, connection);
    
    command.Parameters.Add(new OleDbParameter("path", path));
    command.Parameters.Add(new OleDbParameter("text", criteria));
    
    connection.Open();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 可以从远程计算机访问吗?

  4. 即使服务器没有安装相关软件,这是否也能工作 - 即如果目录包含excel文件,即使服务器没有安装办公室,它是否会编入索引?

Vla*_*idt 2

对于 3) ,4) msdn 使用 SQL 和 AQS 方法查询索引 1) 您可以尝试通过 import unsafe 添加 windows 函数。对于2)看起来很奇怪老式但我想这种方法没有其他选择