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



我需要在给定位置搜索指定内容的文件。这些文件将通过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();
        }
    }
}

我对此有几个疑问:

  1. 是否有更好的(即更多的。net)方式访问Windows搜索,除了使用字符串查询?
  2. 是否有方法参数化文本?我尝试直接将OleDbParameters添加到命令中,但显然CollatorDSO不支持它。显然,我不希望必须事先对数据进行消毒——就像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();
    
  3. 可以从远程机器访问吗?

  4. 即使服务器没有安装相关软件,也会工作吗?例如,如果目录包含excel文件,即使服务器没有安装office,它也会索引吗?

for 3),4) msdn使用SQL和AQS方法查询索引对于1),您可以尝试通过导入不安全添加Windows功能。For 2看起来很奇怪,但我想这种方法没有其他选择

你可以在Process/ProcessStartInfo中使用FindStr。

Findstr(一个命令行工具)内置于您的服务器中,并且能够访问您所模拟的用户可以访问的任何位置。

我在一个小的单页实现中尝试了这个,我能够读取/扫描本地驱动器上的文件以及UNC路径。

这可能是您的一个选项。输出为文本

相关内容

  • 没有找到相关文章

最新更新