Windows Search のSQL文にSystem.ItemUrlを指定すると、検索処理に失敗する
こんにちは、Platform SDK (Windows SDK) サポートチームです。
アプリケーションから Windows Search 機能を利用してファイルの検索を行った場合、内部的なエラーにより検索結果が得られない現象についてご案内します。
現象
Windows 10 1703 (Creators Update) および Windows 10 1709 (Fall Creators Update) 上で OS の Windows Search 機能を利用してファイル検索を行い、結果としてファイルの URL (file:///c:/mydir/bar/hello.txt 等) を取得しようとすると、検索に失敗します。
たとえば、アプリケーションから以下のように SELECT 文に System.ItemUrl を指定した場合、hr = cCommand.Open(cSession, pszSQL); が DB_E_ERRORSOCCURRED エラーを返して失敗します。
#include <atldbcli.h>
CDataSource cDataSource;
hr = cDataSource.OpenFromInitializationString(L"provider=Search.CollatorDSO.1;EXTENDED PROPERTIES=\"Application=Windows\"");
CString pszSQL = “SELECT System.ItemUrl FROM MachineName.SystemIndex WHERE SCOPE='file://MachineName/<path>'”
if (SUCCEEDED(hr))
{
CSession cSession;
hr = cSession.Open(cDataSource);
if (SUCCEEDED(hr))
{
CCommand<CDynamicAccessor, CRowset> cCommand;
hr = cCommand.Open(cSession, pszSQL);
if (SUCCEEDED(hr))
{
for (hr = cCommand.MoveFirst(); S_OK == hr; hr = cCommand.MoveNext())
{
for (DBORDINAL i = 1; i <= cCommand.GetColumnCount(); i++)
{
PCWSTR pszName = cCommand.GetColumnName(i);
// do something with the column here
}
}
cCommand.Close();
}
}
}
原因
この問題は Windows Search SQL の SELECT 文に System.ItemUrl が指定されている場合、検索処理が DB_E_ERRORSOCCURREDエラーで失敗することが原因で発生します。これは内部的なロジックの問題によりエラーが発生しており、製品の不具合であることを確認しています。
回避策
SELECT 文に System.ItemUrl が指定されている場合、検索が失敗するので、この値を指定しないでください。検索結果としてファイルパス (c:/mydir/bar/hello.txt 等) が必要な場合は、System.ItemPathDisplay を代替として利用いただけます。URL として検索結果のパスを扱いたい場合は System.ItemPathDisplay の結果に独自に file スキーマを追加していただき、プログラム的に回避いただく方法があります。
状況
この問題は次期Windowsに修正が行われる予定です。
参考情報
Windows Search 機能と、その中の SQL クエリの利用方法に関する概要については、以下を参照ください。
Windows Search
https://msdn.microsoft.com/en-us/library/windows/desktop/ff628790(v=vs.85).aspx
Querying the Index with Windows Search SQL Syntax
https://msdn.microsoft.com/en-us/library/windows/desktop/bb231256(v=vs.85).aspx
また、System.ItemUrl や System.ItemPathDisplay など、紹介したシステム プロパティの詳細と Windows Search との関係については、以下を参照ください。
Property System Overview
https://msdn.microsoft.com/en-us/library/windows/desktop/ff728871(v=vs.85).aspx
Windows Properties
https://msdn.microsoft.com/en-us/library/windows/desktop/dd561977(v=vs.85).aspx