« スウォッチの「未使用項目を選択」機能で使用色が選択される | Home | 世田谷区連合運動会 »

Sep 142017

フォントキャッシュ(fntcache.dat)の再構築自動化

illustratorでフォントが表示されなくなる件」で書いた方法で、とあえずフォントが使える状態に戻せるようになった。

しかしかなりの高頻度でフォントキャッシュが壊れていて、「フォント状態確認+FNTCACHE.DAT削除して再起動」から一日がスタートするという状態。
これはモチベーション的に大きな問題ということで、この手順を自動化してみることにした。

処理内容はシンプルに、シャットダウン時に「FNTCACHE.DAT」をバッチで削除し、次起動時にフォントキャッシュの再構成が発生する状態にするだけ。(起動時間が長くなるかもしれないが、2回起動よりは手間は少ないだろう・・・)

処理は「グループ・ポリシー」を用いて対応。(「タスク」は「タスクスケジューラー」のトリガーイベントに「シャットダウン」が無いため対応できなかった)

以下に、簡単に手順をメモしておく。(※この処理によって発生する不具合などについては不明なので、あくまで自己責任で対応してください)

バッチファイルの作成

テキストエディタで以下コマンドのバッチファイルを作成。ファイル名は"delete_fontcache.bat"とか適当に。
一応バッチ単体で"FNTCACHE.DAT"が削除されるか動作検証。(削除した後は再起動して"FNTCACHE.DAT"を再構築)

del %windir%\system32\FNTCACHE.DAT

グループポリシーの設定

「グループ・ポリシー・オブジェクト・エディタ(gpedit.msc)」を起動。
(スタートで「gpedit」入力で表示される「グループポリシーの編集」が対象)

2017-09-14_092013.pngのサムネイル画像

シャットダウンスクリプトは「コンピューターの構成 / Windowsの設定 / スクリプト(スタートアップ / シャットダウン)」内に格納されている。
「スクリプト(スタートアップ / シャットダウン)」画面の「シャットダウン」をダブルクリックして、「シャットダウンのプロパティ」ダイアログを表示。

2017-09-14_092103.png

「スクリプト」タブの「追加」から先に作成したバッチファイルを「スクリプト名」に指定。
スクリプトの登録はこれで終了。

2017-09-14_102619.png

シャットダウン設定の変更(2017/9/15追記)

ここまでの設定だと再起動時にだけ作動し、通常のシャットダウンでは動作しないことが判明。
Windows10では電源OFFがスリープとして処理される設定になっているらしく、シャットダウンがシャットダウンとして動作していないらしい。

ということで、シャットダウン設定を変更する。
まず、タスクバーのWindowsアイコンを右クリックして「設定」を選択

2017-09-15_101400.png

「Windowsの設定」画面で「システム」を選択。
「電源とスリープ」項目の「関連設定 / 電源の追加設定」を選択

2017-09-15_101438.png

「電源オプションダイアログ」が開くので、「電源ボタンの動作を選択する」項目を選択

2017-09-15_101509.png

「電源ボタンの定義とパスワード保護の有効化」ダイアログが開く。
「現在利用可能ではない設定を変更します」を選択。

2017-09-15_101527.png

「シャットダウン設定」の「高速スタートアップを有効にする(推奨)を無効(チェックOFF)にして、変更を保存。これで「シャットダウン」時にきちんと「シャットダウンスクリプト」が動作するようになる。(起動が少し遅くなるらしいが、私の環境では体感できていない)

2017-09-15_101536.png

動作検証

「%windir%\system32\FNTCACHE.DAT」のタイムスタンプを確認して、再起動実行。
再起動後に「FNTCACHE.DAT」のタイムスタンプが更新されていれば、バッチが動作しているはず。(多分)

とりあえず、これで起動の度にフォントキャッシュが再構築されるようになった。
今のところ特に問題は発生していないので、多分大丈夫だろうと思う・・・。

備考

他の方法として、フォントキャッシュサービス(Windows Font Cache Service)を停止するやり方もある。

ただ、サービスの説明文に「共通で使用されるフォント データをキャッシュすることによって、アプリケーションのパフォーマンスを最適化します。このサービスがまだ実行されていない場合は、アプリケーションによって起動されます。このサービスは無効にできますが、無効にすると、アプリケーションのパフォーマンスが低下します。」と書かれている。

どれくらいパフォーマンスが低下するか試していないので実用に耐えられるのかは不明。サービスへのアクセスなどは「How To Rebuild Font Cache in Windows 10」を参照。

参考

2 Comments

再起動の場合は動作しているのだけど、シャットダウンしてからの通常起動では動作していない雰囲気。要調査。

Windows10ではシャットダウンでシャットダウンが行われないということらしいので、シャットダウン設定の変更を追記。

Leave a comment

Search and Archives