wicainventory.exeの謎を追え

tl;dr: 検索で来る人があまりにも多いのでまとめ。これはインストールされたアプリケーションを検索して互換性を検証する。しかし、何故か異常にCPUを喰う上に終わらないことが多い。止めるには:

  1. 管理ツール→タスクスケジューラを開く
  2. タスクスケジューラライブラリ→MicrosoftWindows→Application Experience
  3. Microsoft Compatibility AppraiserとProgramDataUpdaterの2つのタスクを"無効"にする

これで止まる。

以前の内容(どうやって調べたか)

PCを使っていると急にCPU負荷が上昇していることが有る。タスクマネージャで見てみると、

Windows Install Compability Advisor Inventory ToolがCPUを食っている。Compabilityは多分 Compatibility で、いわゆる互換性アシスタントとかの関連ツールに見える。
こういう時は、Process ExplorerでHandleを観察し何を開いているか見るか、Windows Performance Recorder(WPR)でトレースを採取し、Windows Performance Analyzer(WPA)でスタックトレースを見て見当を付ける。

WPRで記録したトレースをWPAで開き、Trace→Load symbols...してスタックトレースを見ると、.msiのクエリに時間を掛けていることがわかる。というわけで、このツールは多分Windows Installerの分析プロセスだろうということで、関連しそうなサービスを探してみるが無い。
サービスの無い自動起動系プロセスで、かつMS純正のものは概ねグループポリシで制御されるので、gpedit.mscを実行し、それっぽい項目をオフにしてみた。

というわけで、これに効果が有るのかはまだ観察中。 追記: ダメでした。
... グループポリシの変更は効果が無かったので、Process Explorerコマンドラインを取りよせてみた:

WicaInventory.exe /apps /fast /ext "exe,sys"
/output "C:\Windows\TEMP\CompatTelemetryLogs\WICA_Programs_SPRING.xml"
/log "C:\Windows\TEMP\CompatTelemetryLogs" "C:\Windows\system32\CompatTel"

ここに記録されるログを観察すると、タスクスケジューラのこのエントリ(ProgramDataUpdater)が問題のwicainventory.exeを起動することを突き止めた:

というわけで、これがApplication Experienceカテゴリに有るということは、Application Experienceサービス(AeLookupSvc)がトリガしていると考えられる。が、SYSTEMのhookが依存しているサービスを無効にすることは一般に好ましくない( http://support.microsoft.com/kb/2483362/ja )。
ひとまず、ProgramDataUpdaterタスクを無効にして経過を観察してみる。
追記: まだダメだ。。

C:\Windows\system32\rundll32.exe aepdu.dll,AePduRunUpdate -nolegacy

ということで、Microsoft Program Appraiserも無効化してみた。
追記: これで急にファンが回りだすことはほぼ無くなったようだ。というわけでwicainventory.exeが急にCPUを喰い始めたら↑の2つのタスクを無効にすると良さそう。