Return to 特集

vistaとffdshow tryoutsの組み合わせで、設定によってはvistaの動作が不安定になる。

去年組んだVistaなマシンのエクスプローラ周りが不安定だったのが、やっと解決した。

一時はマジで再インストールを考えたぞ…春休みだから、ある程度時間は取れるからね。

症状

  • ウェルカムセンターを開くとフリーズする
  • 画像/動画ファイルのサムネイルが生成されなくなる(キャッシュ分は表示される)
  • Windowsフォトギャラリーで、全画面スライドショーを実行し、画像が切り替わる時のトランジション効果の種類を変えるか 、「終了」を押すとフォトギャラリーがフリーズする
  • エクスプローラで上書きコピー/移動の操作をしても、上書き確認のダイアログが出ず、何も起こらない ←これ結構ひどいぞw
  • ファイルのプロパティの共有タブを開くとフリーズ

特徴

  • フリーズした場合はExproler.exeのプロセスを止めて、再度実行すると回復できる(しかし上と同様の操作を行えば再びフリーズする)
  • いつも起こるわけではなく、起動からしばらくの間は上の操作をしても普通に動き、そのうちおかしくなる。
  • 上3つに関しては同時に起こる

過程を書いているうちに長くなってしまったので、結論を先に書いちゃいますw

原因

ffdshow tryoutsのビデオデコーダー設定の、「DirectShowのコントロール」→ 「未知のアプリケーションがffdshowをロードしようとした時ダイアログを表示する」にチェックが入っていて、かつ、「以下でのみffdshowを使用する」または「以下では ffdshowを使用しない」のどちらかに”dllhost.exe”が入っていない。

~ここから推測~

Explorerがサムネイルを生成する時に、dllhost.exeを呼び出す。

このときffdshowの設定で指定した形式に関しては、ffdshow経由でサムネイルを生成するが、ffdshow が「dllhost.exeは未知のアプリである」と判断したときに、ffdshow側がダイアログを出すはずが、うまくいかずにdllhost.exe が応答待ちになっているか、フリーズする。

その結果、Vistaでdllhost.exeを利用している部分の動作に影響が出る

対処法

「DirectShowのコントロール」→「未知のアプリケーションがffdshowをロードしようとした時ダイアログを表示する」を利用する場合は、「以下でのみffdshowを使用する」または「以下では ffdshowを使用しない」のどちらかのリスト に”dllhost.exe”を追加(Beta4ではデフォルトで「以下でのみffdshowを使用する」のリストに入ってる)

いきなりエクスプローラの話からffdshowの話にぶっ飛んでるけど…以下解決までの過程を。

Vista不安定だな、とか愚痴をこの記事に書いて草稿に入れて放置している間に、偶然にも「特定のフォルダを開いた時点で起こる」ということを見つける。

そのフォルダの中身の共通点として、ビデオファイルがあるということがわかった。

この時点でコーデックを疑い始める。

色々考えてみて、怪しいと思ったのがffdshow tryouts。

結構使ってるからアンインスコするのもなーってことで、とりあえず設定でどうにかならないかと試みる。

結果、デコーダー設定の、「DirectShowのコントロール」→「未知のアプリケーションが~」にチェックが入っているとフリーズすることが判明。

インスコしているのはBeta3。ここで新しいバージョンが出ていないかどうか確かめると、Beta4があったのでバージョンアップ。念のため、インストーラで設定の初期化を選択した。再度Beta3と同じ設定を再現して、症状が出るかどうかを確認してみた。

設定で「未知のアプリケーションが~」にチェックを入れ、「ディスク クリーンアップ」で縮小表示(サムネイルキャッシュ)を消して再度ビデオのあるフォルダを開いてみたが、今度は無事にサムネイルが生成された。

何故Beta4ではうまくいった?

Beta3とBeta4の「以下でのみffdshowを使用する」の初期状態で入っているリストの差分を調べてみたところ、いくつかサムネイル生成に関係してそうなものを発見。

そこで、まずはBeta3の初期状態で入っているリストの内容をそのまま入れて、ビデオのサムネイルが生成されるかどう確かめてみると…見事に生成が止まってしまった。どうもここが原因らしい。

そこで、Beta3とBeta4の初期状態で入っているリスト差分から、怪しそうなものをピックアップして、Beta4の初期状態で入っているリストをロードした後に、怪しいやつだけ消して絞り込んでみることにした。

ここで、「dllhost.exe」がリストにないと生成が止まることがわかったってわけ。

Vistaでffdshow tryoutsを使うときには、リストからdllhost.exeを消さないように注意しましょうってことで。

某研のPCにもvista ultimateとffdshowが入っていたので、dllhost.exeをリストから抜いて再現するかどうか試したところ見事に発症。

原因はExplorerのバグだと思い込ん でたから、原因がわかるまでに3ヶ月もかかってしまったけど、これでVista再評価できるかな…デザインは気に入ってるので。特にプログレスバーとか。