1

当我尝试执行以下 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) 的权限有任何显着差异。
  • Win 8.1 远程机器似乎没有搜索索引文件夹 C:\Program Data\Microsoft\Search\Data\Applications\Windows\Projects\SystemIndex\Indexer\CiFiles,其中包含 Win 7 机器上存在的 .ci 文件。
  • 我认为这些是 Windows Search Indexer 使用的 edb 数据库(Jet Blue)的数据库文件。
  • 本地计算机运行 Windows 8.1。

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

4

2 回答 2

0

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

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

如果本地机器看不到路径,或者范围不存在,则会出现未指定错误。提供更多信息的错误消息会有所帮助!

ps从本地计算机访问 UNC 路径并不是全部。在远程计算机上,搜索位置列表包括两个配置文件夹文件夹中的 My Documents 文件夹,这两个文件夹是共享的,并且对 SYSTEM 具有相同的权限,SYSTEM 是用于运行远程搜索的帐户。共享权限是相同的,但是当在范围参数中使用配置文件文件夹之一时,会出现未定义错误。其他配置文件文件夹的搜索功能符合预期。

于 2015-09-05T11:08:12.077 回答
0

错误代码 0x80040718 可以在WindowsSearchErrors.h. 它对应于:

QRY_E_INVALIDSCOPES
The scopes specified for the query were incorrectly formatted.

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

  • 目录前的服务器名称前缀
  • 在 SCOPE 中提供有效的 UNC 份额

来自 MSDN:范围和目录谓词

若要查询远程计算机的本地目录,请在 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 Formatting Requirements记录了用于远程查询的 SQL 的一些其他变体:

  • 本地file:///c:\test\example\
  • 本地file:c:/test/example/
  • 本地c:\test\example\
  • 远程file:///\\server\share\
  • 远程file://server/share/
  • 远程\\server\share\

这意味着:

  • 您的查询必须在两个地方添加服务器名称
  • SCOPE 或 DIRECTORY 中的 UNC 必须是远程计算机上的有效共享

例如:

SELECT System.ItemNameDisplay
FROM "ALEC-HP".SystemIndex
WHERE SCOPE='file://ALEC-HP/Simon.ALEKATEST.000'
于 2017-08-17T03:19:57.707 回答