从c#在远程机器上运行windows搜索查询错误

本文关键字:运行 windows 搜索 错误 查询 机器 程机器 | 更新日期: 2023-09-27 18:07:00

当我尝试执行以下OLEDB命令以编程方式查询同一域中的远程计算机(ALEC-HP)上的搜索索引时,我得到以下错误消息

未指定错误:-2147219688(0x80040718)

在本地机器上可以看到共享''ALEC-HP'Simon.ALEKATEST.000 OK

SELECT System.ItemNameDisplay,SYSTEM.ITEMURL,System.DateModified, 
       System.ItemName, System.Search.Rank, System.Keywords,
       System.Search.AutoSummary,System.Search.GatherTime, System.ItemType  
FROM ALEC-HP.SystemIndex 
WHERE Scope='file://ALEC-HP/Simon.ALEKATEST.000'
AND CONTAINS(*,'"April Dwyer"',1033)

如果将查询简化为

SELECT  System.ItemNameDisplay,SYSTEM.ITEMURL,System.DateModified,
        System.ItemName, System.Search.Rank, System.Keywords, 
        System.Search.AutoSummary,System.Search.GatherTime, System.ItemType  
FROM ALEC-HP.SystemIndex 
WHERE CONTAINS(*,'"April Dwyer"',1033)

出现相同的错误。

本地索引的查询

SELECT  System.ItemNameDisplay,SYSTEM.ITEMURL,System.DateModified, 
        System.ItemName, System.Search.Rank, System.Keywords,
        System.Search.AutoSummary,System.Search.GatherTime, System.ItemType 
FROM "SYSTEMINDEX" 
WHERE CONTAINS(*,'"April Dwyer"',1033)

运行好。在ALEC-HP上重建搜索索引没有帮助。

远程机器ALEC-HP运行Windows 7,本地搜索在该机器上工作正常。

  • 使用运行Win 8.1的远程机器,远程索引查询运行正常。
  • 我看不到在查询运行的远程机器上的搜索索引文件夹(C:'Program Data'Microsoft'Search)和不运行查询的远程机器上的权限有任何显着差异。
  • win8.1远程机器似乎没有一个搜索索引文件夹C:'Program Data'Microsoft' search 'Data'Applications'Windows'Projects'SystemIndex'Indexer'CiFiles,其中包含win7机器上存在的。ci文件。
  • 我想这些是Windows搜索索引器使用的edb数据库(Jet Blue)的数据库文件。
  • 本机运行Windows 8.1。

问题现在出现在运行Win 8.1的远程机器的搜索索引

从c#在远程机器上运行windows搜索查询错误

对于远程机器上的查询,scope='File:UNCPath'子句必须包含与本地机器共享的UNC路径(该路径可以使用正斜杠或反斜杠)。例如:

AND SCOPE='file://server/shareName'

如果路径对本地机器不可见,或者作用域不存在,则出现未指定错误。更详细的错误消息将会很有帮助!

注。从本地机器访问UNC路径并不是全部。在远程机器上,搜索位置列表包括两个配置文件文件夹文件夹中的My Documents文件夹,这两个文件夹都是共享的,并且对SYSTEM具有相同的权限,SYSTEM是用于运行远程搜索的帐户。共享权限是相同的,但是当在scope参数中使用其中一个配置文件文件夹时,出现未定义错误。

WindowsSearchErrors.h存在错误码0x80040718。它对应于:

QRY_E_INVALIDSCOPES
The scopes specified for the query were incorrectly formatted.

如果要搜索另一台计算机的本地目录,必须:

  • 在目录
  • 之前加上服务器名称的前缀
  • 在SCOPE
  • 提供有效的UNC共享

From MSDN: SCOPE and DIRECTORY谓词

要查询远程计算机的本地目录,请在SCOPE或DIRECTORY子句中包括目录前的计算机名称和远程计算机上的UNC路径。

您可以在Windows搜索中的查询进程中找到更多信息

本地和远程查询

可以在本地或远程执行查询。使用FROM子句的本地查询如下例所示。本地查询只查询本地SystemIndex目录。

FROM SystemIndex

使用FROM子句的远程查询如下例所示。添加ComputerName将前面的示例转换为远程查询。

FROM [<ComputerName>.]SystemIndex

要通过远程查询检索项,该项必须满足以下要求:

  • 可通过UNC路径访问。
  • 存在于客户端可以访问的远程计算机上。
  • 将其安全设置为允许客户端具有读访问权限。

共享文件夹后,可以通过在FROM子句中指定远程计算机的机器名,在SCOPE子句中指定远程计算机上的UNC路径来查询本地索引。使用FROM和SCOPE子句的远程查询如下例所示。

SELECT System.ItemName 
FROM MachineName.SystemIndex 
WHERE SCOPE='file://MachineName/<path>'

和页面URL格式要求文档的远程查询SQL的一些其他变化:

  • Local: file:///c:'test'example'
  • Local: file:c:/test/example/
  • Local: c:'test'example'
  • Remote: file:///''server'share'
  • Remote: file://server/share/
  • Remote: ''server'share'

这意味着:

  • 你的查询必须在两个地方添加服务器名
  • SCOPE或DIRECTORY中的UNC必须是远程机器上的有效共享
例如:

SELECT System.ItemNameDisplay
FROM "ALEC-HP".SystemIndex
WHERE SCOPE='file://ALEC-HP/Simon.ALEKATEST.000'