2013年10月22日火曜日

Everything File Search が Windows7 で空のリストを返す。タスクスケジューラでの起動に変えて解決できた。

2013-11-09 追記

 以下の対応で Everything をログイン時に起動させた場合に

  • 『ようこそ』画面の後、デスクトップが正しく表示されず、のっぺらぼうのままかタスクバーだけしか表示されず、explore.exe がイベント AppHangB1 を残してクラッシュする。
  • 起動とログインを繰り返すと問題なくデスクトップが表示され、障碍はランダムに発生するかのように見える。

といった症状が発生する場合、セーフモードで起動後、Everything のログイン時の起動指定を解除することで障碍は解消するかもしれない。(障碍原因の切り分けと再現性の確認は2013-11-09時点で取れていない。) AppHangB1 でウェブ検索をすると、対処例を見つけることができる。幾つかの記事の内容を確認したが、つまりは、explorer.exe 起動時に実行されるプログラム(シェル拡張等)の干渉によるクラッシュであるとして対処法が示されていた。


概要

Windows7 において、Everything File Search で "Start Everything on system startup" を on として運用開始した場合、特定のドライブに格納されたファイルを検索できないことがある。

 タスクスケジューラーを使い『ログオン時に管理者権限で実行されるタスクとして定義する』ことで、ファイル検索ができるようになった。

実施手順については "Windows7 管理者権限 スタートアップ タスクスケジューラ" といったキーワードでGoogleから探し出すことができるが、留意すべきは、

  • 『全般』タブでの管理者権限での実行指定
  • 『トリガー』タブでのログオン時起動指定
  • 『条件』タブでの電源種別による起動抑止指定(の解除)

といったあたり。


状況

 ASUS UX31E。外付けHDDを一台つけ半ば固定機のように使っている。OSは、Win7 Pro SP1 (64bt). プリロード版 Windows7(64bit) Home を anytime upgrade で Professional としてある。

 あるファイルを探す必要があったので、XPでも使っていた Everything(http://www.voidtools.com/)を使うことにした。インストール後最初に起動したときはUACのポップアップが出たが、特段の問題はなく検索できた。以降使うために Everything のオプション [General] セクションの "Start Everything on system startup" を on に指定しておいた。爾来、常駐プログラムとなった。

 後日、Everythingを再度利用したのだが、検索結果が空であった。空であるのは、組み込みのSSDに対してのみで、外付けHDDをについては検索結果を返す。作業用のユーザーは Administrators グループに加えてある。

 Everythingの本家のサイトのFAQ" その 5.Troubleshooting - 5.2. The result list is empty" の項を読む。そこに示された手順のうち、USN Journal 関連の指定ができない。検索できないドライブについては、Everything の Index の設定のうちの Setting for < drive_name > のペインにある Enable USN Journal のチェックボックスが外れているだけでなく、チェックボックス自体が dimm 状態になっており、触れる事もできない状況であったからである。

 当初、権限周りの可能性も考えた。しかし、初回はうまく動いたし、Everything の代替として FileSeeker 3.1.1 を使えば、存在するファイルの検索は可能。一方、Everthing 導入後、SSDに関するチューニング(「Windows7をSSD で利用する際に遣っておけ」的チューニングの類)を実施しており、ドライブごとのインデックス指定の設定(コンテンツにもつける・つけないのアレ)や Windows Search を更新の抑止したりもした。そういった経緯から『SSDには不要な・非推奨の処理の抑止』のどれかが干渉しているのかとアタリをつけ、試行錯誤を繰り返した。(結果としては無駄足だった。)

 コマンドラインツールの FSUTLで、USN Journal へのジャーナリングが行われていることを確認するに至り、やはり UACかと考えを改める。起動時の管理者権限実行について再度検索し、その手の how-to 記事を見つけた。そこに指定されたとおり、タスクとして定義たうえで起動時(今回はログオン時)に管理者権限で実行する属性を与えることで、正しく動かすことができた。