#untitled note

私的な考えとかメモ、その他トラブルシュート

Windows10でスタートメニュー検索時にアプリが見つからない件の対処方法

Windows10PCでスタートメニューを呼び出していきなり文字を打ち込むと検索ができるんですが、私はこれをランチャーのように使っているわけです(疑似CraftLaunch)

そんな便利な機能が、実はWindows7から存在するわけですが、Windows10では厄介なことに大規模アップデートをしたあとにプログラム一覧上に存在するはずのアプリが見つからなくなるというバグが発生するようです。

めちゃくちゃ長い記事になりますが、調べまくってわかったこと全部書きだしてやろうと思います。

2017/04/18追記

少なくとも私の環境では完全に直ったので[解決策]に追記更新。
もしコレで直ったらコメントで教えてください。以前の暫定対処はコメントアウトしておきます。

2017/05/12追記

タイトル短めに変更

2017-05-27追記

完全に機能が復活しているため既に暫定ではないということで、タイトルから暫定を消去

 

 

発生環境

OS:Windows10 64bit バージョン 1703 ビルド 15063.138
メモリ:16GB (内2GBがRAMDISK)
CPU:i7-4790 3.6GHz
OSインストール先のディスクの種類:SSD
SeachIUI.exeのバージョン: 10.0.15063.0

有償パッケージでWindows10をクリーンインストール→一つのアプリをインストール後、即CreatorsUpdateを実行して起こったのだから救いようがないですね*1

 

SearchUI.exeのバージョン確認は以下で確認できます。

  1. 以下のフォルダを開く
    C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy
  2. SearchUI.exeの[プロパティ]を開いて[詳細]タブからファイルバージョンを確認

上記のフォルダが無い場合、タスクマネージャからSearchUI.exeを探し出して右クリック→「ファイルの場所を開く」でエクスプローラが開けます。

f:id:rizenback000:20170416230336p:plain

 

どういう現象なのか?

スタートメニューやタスクバー上の検索バーからプログラム一覧上のアプリを検索したときに、存在するアプリなのに検索結果に表示されないというものです。

私が発生したケースでは、はじめはきちんと検索できていて発生したあとも検索できていたものは問題なくヒットする、現象発生後にインストールしたものはどのアプリもヒットしない、という現象でした。

WindowsSearch(SearchIndexer.exe)がインデックスを構築した範囲の検索、つまりただのフォルダ・ファイルの検索は正常に行なえます。

画像で説明すると…

f:id:rizenback000:20170416193535p:plain

ここにある「サクラエディタ」と「Apple Software Update」を検索した場合、「Apple Software Update」は見つかるのに、最近追加した「サクラエディタ」は見つからない、といったような状態です。

f:id:rizenback000:20170416223201p:plainf:id:rizenback000:20170416193704p:plain

 インデックス構築済みのファイル検索は普通に見つかる

f:id:rizenback000:20170416193821j:plain

 

原因

SearchUI.exeが使用するインデックスファイルが壊れている、もしくはSearchUI.exeがインデックスファイルを更新しなくなるバグと思われます。

まだ対策を見つけてから日が立っていないためわかりませんが、個人的には後者の可能性が高いと思っています。

追記:2017/04/18

設定の「バックグラウンドアプリの実行を許可する」をオフにしてあった為に起きた問題だった。
インデックスが壊れているわけでもバグでも何でもない。仕様。

 

解決策

追記:2017/04/18

ちゃんとした解決策が見つかったので更新。

Windowsの設定→[プライバシー]→[バックグラウンドアプリ]→[アプリのバックグラウンド実行を許可する]をONにしてください。

たったこれだけです。下の方の各種アプリのオン/オフはすべてオフでも大丈夫です。*2

この全ての[アプリのバックグラウンド実行を許可する]というチェックボックスは古いWindows10では無かったチェックボックスだったので、こういう事象が見つかって無かったんですね。

f:id:rizenback000:20170418074522p:plain

私の環境ではこれで解決したので、解決しなかった人教えてください。*3

 

これらの手順は暫定対処です。実施する際にはこの検索に関する設定・入力履歴(なんてあるのか知りませんが)等が消えても良いという方だけ実施してください。私は責任を持ちません。

また使用しているSearchUI.exeのバージョンによってはインデックスを使わないバージョンも存在しているようですので、ここに記載した内容がすべてそのまま、とは思わないようにしてください。

 


暫定対処

以下のフォルダの「LocalState」を削除してSearchUI.exeを強制終了(勝手に再起動してくるのを待つ)させください。

C:\Users\ユーザ名\AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\LocalState

通常SearchUI.exeが再起動されればLocalStateフォルダを作り直しますが、作られないこともあるようです。その場合はもう一度「LocalState」を削除してください。
さらに、場合によってはSearchUI.exeのプロセスによってロックされており、削除ができないこともあります。その場合、SearchUI.exeを一度強制終了し、(SearchUI.exeが再起動してくる前に)すぐに「LocalState」を削除してください。

その後、以下のフォルダに「Apps_{ランダム16進数?}」とされているフォルダができていることを確認できれば、正常に検索できるようになっているはずです。

C:\Users\ユーザ名\AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\LocalState\ConstraintIndex

 

暫定対処とした理由

暫定としたのは、本来のインデックスファイル以外のものも削除してしまう必要があるからです(動作に影響は無さそうなのは確認済み)。

また、SearchUI.exeがこのアプリインデックスの更新タイミング・更新条件もわかっていないので、もしかしたらこの最初だけ作れてあとずっとこのままという可能性もあるため、その場合は根本的な解決にはなりません(まだ正常に更新されるかまでは確認できてません)。

実際にプログラム一覧の検索で使われているインデックスファイルは「ConstraintIndex\Apps_(省略)」フォルダ内の「Apps.index」と「App.ft」です。

このどちらかを消してSearchUI.exeを再起動させると、プログラム一覧のアプリをいくら検索しても全くヒットしなくなります。

ですが、SearchUI.exeの仕様なのか、これだけ消して再起動してもこれらのインデックスファイルは再作成されません。

いろいろ試した結果、同階層にある「ConstraintIndex」フォルダでもなく、「DeviceSearchCache」フォルダでもなく親フォルダの「LocalState」を消せばインデックスファイルが再作成されることがわかった為の「暫定対策」です。

 

しばらく様子を見て完全対策になっているようなら、タイトルから「暫定」を外す予定…。

LocalStateフォルダ内のフォルダについて 

ついでにLocalStateフォルダ内のものについてわかったことを書き留めておきます。

C:\Users...Microsoft.Windows.Cortana_cw5n1h2txyewy\LocalState
 ├─ConstraintIndex
  ⇒この「ConstraintIndex」フォルダはSearchUI.exeのバージョンによって存在しないようです(SearchUIのver:10.0.10586.873では存在しないことを確認)。
│ ├─Apps_{97c2ee5a-4593-43b8-95f7-3f2ab45c7d0e
  ⇒プログラム一覧上のアプリどものインデックスを格納するフォルダ
│ ├─Input_{378057dc-88c2-470d-b806-a6f056db2601}
  ⇒わからん。
│ └─Settings_{31aeab9d-6e1d-4583-ae00-678e58ba672e}
  ⇒わからん。全然わからん。
├─DeviceSearchCache
  ⇒わからん。削除しても問題なかった。Index作成までの中間ファイル?
└─Flighting
  ⇒わからん。削除しても問題無いうえに、このフォルダだけ削除しても自動でフォルダが再作成される

 

(おまけ)コルタナが使うと思われるインデックスファイル

他にも、フォルダを漁ると「C:\Users\ユーザ名\AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\AppData\Indexed DB」内に「IndexedDB.edb」というものがありますが、これは後述する方法でコルタナを無効にして削除すると再作成されなくなったので、検索側で使うインデックスファイルとは無関係の、コルタナ側で使うインデックスファイルと見ていいでしょう。

こちらにもIndexDB.edbはコルタナが使っているような記載がありました。

Cortana - ForensicsWiki

There are a number of artefacts associated with Cortana; 2 backend Extensible Storage Engine (ESE) databases, and other configuration files. The 2 Cortana Databases are located:


\Users\user_name\AppData\Local\Packages\Microsoft.Windows.Cortana_xxxx\AppData\Indexed DB\IndexedDB.edb
\Users\user_name\AppData\Local\Packages\Microsoft.Windows.Cortana_xxxx\LocalState\ESEDatabase_CortanaCoreInstance\CortanaCoreDb.dat


SearchUI.exeとは一体なんなのか?

この現象、最初はWindowsSearch(以下SearchIndexer.exe)を疑っていましたが、インデックスのプションからインデックスの再構築、インデックスの作成対象変更、インデックスの配置場所変更、フォルダの権限確認等をやっても全部ダメ。
一度気になってWindowsSearchサービスを停止、インデックスを完全に削除して再起動したら、一切検索できなくなるだろうと見込んでいたのに、なんと状況が変わりませんでした(検索できるものとできないものがある)。

そこでようやく、この問題はSearchIndexer.exeの問題ではなく別にあると気づいて試行錯誤した後に見つけたのが、「SearchUI.exe」です。

 

「SearchUI.exe」は一般的にはコルタナが使っているアプリだという認識のようです。タスクマネージャ上の説明で「Search and Cortana application」とされていますので、半分は正解です。

では残り半分のSearchとは一体なにか?

答えはタイトルにも記載した、スタートメニュー上に表示される検索機能の実行です。

つまり、SearchUI.exeを停止させると、スタートメニューを開いてキーボードを叩いても検索結果が正しく表示されないどころか、検索欄と検索結果そのものが表示されなくなります。*4

この画面、出てこなくなります。

f:id:rizenback000:20170416215037j:plain

 

コルタナを無効化してSearchUI.exeだけは使いたい場合は?

私のPCはOSインストール時に最初からコルタナを使わない設定にしてインストールしたので、コルタナが動いているところを見たことがないためちょっと自信がないのですが、*5

理論上は

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Windows Search

 の値「AllowCortana」のDWORD(32bit)を「0」にするだけです(たぶん要PC再起動)。
これでコルタナは無効化されます。

この設定をしても、SearchUI.exeは動き続けますので、上記のレジストリを作成(変更)すれば目的達成できると思います。

(レジストリがなんだかわからない人は編集しないようにしてください。最悪PCが起動しなくなったりします。誰も責任を持ちません。)

以下のページを参考にしました。

xsa.jp

 

 

まとめ

スタートメニュー検索は

  • SearchUI.exeが動かしている。
  • SearchUI.exeのインデックスファイルと、WindowsSearch(SearchIndexer.exe)のインデックスの両方を使っている
  • スタートメニュー検索=コルタナではない。
  • コルタナはスタートメニュー検索と依存関係にある。

 

SearchUI.exeは

  • コルタナが使っている(らしい)。
  • スタートメニュー検索でも使われている。
  • スタートメニュー検索のプログラム一覧を検索する時に使われているインデックスはコレ。

    C:\Users\ユーザ名\AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\LocalState\ConstraintIndex\Apps_{ランダム?}

  • ファイル検索に使われているインデックスはコレ。
    (あなたがインデックスのオプションで場所を変更している場合は別)

    C:\ProgramData\Microsoft\Search\Data\Applications\Windows

     

コルタナは

  • 無効化してもSearchUI.exeは生きたまま。
  • 使ってるインデックスはコレ(あともう一つあるらしいけど興味ない)。

    C:\Users\ユーザ名\AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\AppData\Indexed DB

     

(おまけ)コルタナを完全に無効化するためにSearchUI.exeのパスを変更した際の弊害とされているエラーメッセージについて

コルタナを完全に無効化する方法として(あるいはSearchUI.exeを止める方法として)、SearchUI.exeが入っているフォルダをリネームして対応する方法がネット上では出回っていますが、これを実行するとイベントビューア上にエラーメッセージが吐かれます。
(上の方で紹介したコルタナ停止方法のページでもしっかり書いてくれています)

実際に確認したところ、SearchUI.exeを殺したあとに2秒間隔で5回、それ以降はSearchUI.exeを手動で呼び出す操作をした時にエラーが吐かれてます。

f:id:rizenback000:20170416232454p:plain

停止方法紹介ページでは数時間おきに吐かれると書かれていましたが、実際のところはスタートを押した時、タスクバー上の検索バーや検索ボタンを押した時、が正しいのかもしれません(もしかしたら本当に数時間ごとに吐かれるのかもしれませんがそこまで確認してません)。

私は必須の機能だと思っているので止めませんが、必要ない人は以下のページを参考にしてください(これもリスクが有ることを承知した上で実行してください。誰も責任をと取りません。誰もです!)。

xsa.jp

 

(おまけ)SearchUI.exeのバージョンで検索アルゴリズムが違う?

SearchUI.exeの古いバージョン(10.0.10586.873)と、私が確認したバージョン(10.0.15063.0)ではどうも検索アルゴリズムのせいか、それともインデックスの管理方法の違いのせいか、同じ検索ワードでもヒットするものが違いました。

例えば、Windows管理ツールの「コンピュータの管理」を呼び出したい時、今まで(古いバージョン)は「管理」で検索できていたのに、私の今のバージョンではヒットしません。

代わりに「こんぴ」とかひらがなで「かんり」で検索すると出て来る。

(私の好みは「こんぴ」よりも「管理」なので、これを一致させる方法も知りたい…)

 

f:id:rizenback000:20170416221617p:plainf:id:rizenback000:20170416221542p:plain

 

(おまけ)SearchUI.exeがタスクマネージャ上で実行中と中断になっている理由

SearchUI.exeの状態をタスクマネージャで見てると状態が[中断]になっているのですが、最初こいつはなんでサボってやがるんだ?と思いましたが、これは単純に常駐してますよ、という意味のようです。

つまり、実際に働いている時しか実行中となりません。

スタートメニューを開いてキーボードを叩いた時の例で言えば、こんな感じになります。

  1. スタートメニューを開くまで→SearchUI.exeは待機中
  2. スタートメニューを開く→SearchUI.exeは実行中
    ⇒スタートメニューを開いたらキーボード入力に即反応して検索しないといけないので、キーボード入力を待機するために起きてきたんですね。
  3. スタートメニューを閉じる→SearchUI.exeは待機中に戻る

 

*1:個人的にWindows10の使い勝手は歴代Windowsでトップなのですが…

*2:たぶんSearchUI.exe(コルタナ)がWindows10アプリとしてバックグラウンド稼働させてるんだけど、コルタナは基幹アプリだからこのリスト上には出ていないってことかな?

*3:実はちょっとレジストリ弄った部分もあるから複合的な理由で直ったのかも…と思ってもいる。一応書いておくと、HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\SearchにLaunchというキーを作った。中身空っぽなので多分いらないはずなんだけど、削除しても再起動したら復活する:(

*4:これは実際にSearchUI.exeを停止させて確認済みです。

*5:試しにやってみたらUI上・検索動作上なんの変化もありませんでしたが上で書いたようにコルタナが使いインデックスの作成は抑止できていたので無効化されているはず。