Windows Search を修復する
SOFTWARE REPORT
Windows Search
Windows Vista には、ファイルの検索を速くするための Windows Search という機能が搭載されています。
従来の Windows では "インデックスサービス" という機能が備わっていましたが、Windows Vista では "インデックスサービス" は標準では無効化され、代わりにこの "Windows Search" が動作するようになっています。これによってあらかじめ、ハードディスク内にあるファイルのインデックスが作成され、それを用いて高速な検索を実現しているようです。
さて、そんな "Windows Search" が生成するインデックスデータを GIGABYTE 社の GC-RAMDISK (i-RAM) を用いた RAM ディスクへ出力して利用していたのですけれど、引越しの際に RAM ディスク内のデータが消滅したのをきっかけに、"Windows Search" が起動しなくなってしまったのでした。
そもそもそれに気が付いたのは、引越し後にフォルダを作成したりファイルの名前を変更したりしたときに、変更までに 30 秒程も待たされてしまったことがきっかけでした。最初は移動に伴うハードディスクの故障などかとも思ったのですけど、ディスクチェックをしてみても目だった問題は見つからず、少し困っていたんですよね。そんな中、Windows Search が正常に動作していないことが発覚し、それが影響して応答待ちが起こっている様子が窺えました。
そんなことから、今回は "Windows Search" の復旧を行うこととなりました。
Windows Search を起動可能な状態へ復旧する
"Windows Search" の復旧といっても、その道のりは複雑でした。
Windows Vista の標準機能ということで、"コントロールパネル" の "プログラムと機能" から "Windows の機能の有効化または無効化" を行えば良いのかとも思ったのですが、その中には "Windows Search" の項目は見つかりません。"イベントログ" を見てみると、Windows Search のエラーとして "指定されたパスが見つかりません。" という記録が残されていることから、問題はやはり消滅した RAM ディスク上のファイルが見つからないからという感じなのだと思われます。
"コントロールパネル" にある "インデックスのオプション" からその辺りの設定を調整できないかとも思ったのですけど、"Windows Search" が起動していなければその詳細設定が行えない仕様となっています。念のため "管理ツール" の "サービス" から "Windows Search" の再起動を試みてみるもやはり起動に至らないため、これはなかなか前途多難な感じです。
ファイルやフォルダの名称変更時の待ち時間を解消する
レジストリエディタ (REGEDT.EXE) を実行して、"HKEY_LOCAL_MACHINE" > "SOFTWARE" > "Microsoft" > "Windows Search" キーを眺めてみると、"DataDirectory" および "DefaultColumnFile" として、データファイルが登録されているであろうパス情報が見つかりました。その中の "DataDirectory" には RAM ディスクへのパスが記されています。
"指定されたパスが見つからない" ということは、これらの必要なフォルダが存在していないからという可能性が高そうです。そこでまず、これらのフォルダを作成してみることにしました。今回は RAM ディスク上に作成してあったためパス情報が異なりますが、以下では念のため標準パスで記しておきます。
- Data\ (C:\ProgramData\Microsoft\Search\Data\)
- Config\ (C:\ProgramData\Microsoft\Search\Config\)
これらのフォルダを作成して "Windows Search" の再起動を試みてみても、やはり "指定されたパスが見つかりません。" とのことで、"Windows Search" を起動させることはできませんでした。レジストリを眺めてみると他にも "Applications" というフォルダが "Data" フォルダの中に存在している様子だったので、それも作成してみることにします。
- Data\Applications\ (C:\ProgramData\Microsoft\Search\Data\Applications\)
そうしてみると、自動的に "Temp" フォルダも生成されました。
- Data\Temp\ (C:\ProgramData\Microsoft\Search\Data\Temp\)
この段階でファイルやフォルダの名称を変更したときに 30 秒ほど待たされることはなくなりました。
けれども依然として "Windows Search" は起動できない状態です。ただ、エラーメッセージは "指定されたパスが見つかりません。" から "詳細についてはシステムイベントログを確認してください。" に変わっていて、"イベントログ" を確認してみると、"システムカタログを作成できませんでした。" と表示されるところから、一応の進展はあるようです。
Windows Search を起動可能にする
他の Windows Vista 環境などから調べてみると、"Windows Search" では次のフォルダも使用されているようでした。
- Data\Config\ (C:\ProgramData\Microsoft\Search\Data\Config\)
- Data\Applications\Windows\ (C:\ProgramData\Microsoft\Search\Data\Applications\Windows\)
それらも含め、特に "Config\" と "Data\Config\" フォルダにはテキスト形式の設定ファイルが用意されているようです。フォルダの準備も然ることながら、これらに保存されている設定ファイルも "Windows Search" の起動に影響を及ぼす可能性は大きいはずです。とりあえず、これらのファイルを含めて "Windows Search" 関係のフォルダを他の PC からまるごとコピーしてあげれば、"Windows Search" が起動できるようにはなりました。
とはいえ、他の PC から取得したこれらの設定ファイルをそのまま持ってきても良いものなのか、不安が拭いきれないところなので、それについてもう少し調べてみることにしました。
すると "Windows Search" の起動に直接影響する設定ファイルは "Data\Config\" フォルダ内の "gathrprm.txt" および "schema.txt" の 2 つのファイルで、これらはファイルさえあれば内容は空でも起動には直接影響しない感じでした。ただ、"Windows Search" を起動して "詳細設定" を調整してもこのファイルに何かが書き込まれるようなことはなかったので、あらかじめ必要な基本事項が記されておくべきファイルなのかもしれません。
これら "gathrprm.txt" および "schema.txt" の 2 つを正式にどこかから入手することはできないか。
そんなアプローチで調べてみると、これらの設定ファイルは "Windows" フォルダ内にあらかじめ用意されていることがわかりました。それは "C:\Windows\winsxs\x86_windowssearchengine_31bf3856ad364e35_6.0.6000.16386_none_47e1b1bb326f0fb4\" フォルダで、この中に上記 "gathrprm.txt" および "schema.txt" のほか、"Config\" フォルダへ格納する "msscolumn.txt" も含まれていました。これらのファイルをそれぞれ次のようにコピーしてあげれば設定ファイルの復元は完了です。
- "msscolumn.txt" → "C:\ProgramData\Microsoft\Search\Config\"
- "gathrprm.txt" → "C:\ProgramData\Microsoft\Search\Data\Config\"
- "schema.txt" → "C:\ProgramData\Microsoft\Search\Data\Config\"
なお、上記の "winsxs" フォルダは 32 bit 版 Windows Vista 環境用のもので、64 bit 版の環境ではたとえば "amd64_windowssearchengine_31bf3856ad364e35_6.0.6000.16386_none_47e1b1bb326f0fb4\" などとなるそうです。
後は "管理ツール" の "サービス" から "Windows Search" を再起動すれば、たとえば "C:\ProgramData\Microsoft\Search\Data\Applications\Windows\" など、その他の必要なフォルダやファイルが生成され、"Windows Search" が正常に動作するようになりました。
それ以上の設定等は "コントロールパネル" の "インデックスのオプション" を使用すれば大丈夫でしょう。