私はwindows10ユーザーです。最近またアップデートが来て何度か再起動を促すポップアップが表示されていましたが、すぐに再起動はしませんでした。
というのも、私のPCはHDDなので再起動が遅いです。いつもスリープにしているので再起動をするのは可能な限り避けています。その影響もあって再起動を先延ばしにしていました。
そんなある日、とつぜんブラウザ以外のソフトで文字が表示されなくなるというトラブルに見舞われました。Windows update後に再起動していないからかな?と思って再起動したのですが解決しませんでした。
この記事では、Windows10などでメニューやソフトの文字が急に表示されなくなった時に私が行った対象方法をご紹介します。
現象1:突然、ソフト内の文字が表示されなくなった
windows updateのダウンロード・インストールまではバックグラウンドで勝手に動いています。
インストールが終わると再起動を促すポップアップが出ますが、昔と違ってそのまま使えるので再起動を急がなくても問題ないという認識でした。
そんなある日、色々いつもと違う点があることに気が付きました。
そんなこんなで、PCを再起動して様子を見ることにしました。
現象2:再起動しても現象は解決せず
再起動しましたが、現象は変わりません。
起動してしばらくすると文字が表示されなくなります。
むしろ悪化したように思いました。
desktopのアイコンの下の文字列が消えていますし、windwosの右クリックメニューも文字が表示されません。
ネットで調べると、どうもフォントキャッシュが破損しているとこの現象になるということでした。
対策1:フォントキャッシュを削除
検索すると以下の記事が見つかる。
致命的なのがフォントキャッシュが破損しているとエクスプローラーやコマンドプロンプトが動かないので、この通りにはできないことです。
また、microsoft公式にも以下の様な記事があり、windows updateでフォントキャッシュが破損することは無い話ではないようです。
コマンドプロンプト以外に方法が無いので、windows10をセーフモードで起動して、コマンドプロンプトから削除した。
セーフモードについては公式サイトに説明がある
その後、再起動する。
これで直るかと思ったが、 フォントキャッシュを削除しても変化なし だった。
対策2:windows updateを行う
念のため、windows updateを確認したら、『Windows 10 May 2021 Update 21H1』が来ていました。この手のアップデートは時間がかかる反面、ファイルが全体的に置き換わるので問題が解消する可能性が高いと思いました。
早速アップーデートしました。
結果、問題は解決しませんでした。
対策3 : 再度フォントキャッシュを削除する
この時点で、かなりゲンナリしていましたが、ダメ元で、セーフモードでもう一度フォントキャッシュを削除してみました。
そうすると、問題が解決しました。
しかし、PCを再起動すると・・・
PCを再起動したらフォントキャッシュ破損の問題が再発した
セーフモードでフォントキャッシュを削除⇒再起動で問題が解決したようにみえました。
しかし、その後、満を持してPCを再起動したら同じ現象が発生しました。
この時は、ちょっと嫌な感じを持ちました。根が深そう。
その後、色々調べるも対処方法が見つからず、セーフモードでフォントキャッシュを削除⇒再起動すると、正常に戻るがその後、再度、再起動するとフォントキャッシュの破損の繰り返しでした。
後述するシステムファイルの修復をしても問題は解決しませんでした。
ダメもとで、windows update前に戻してみようと思いました。
21H1を削除してみる
プログラムの追加と削除から21H1を削除してみました。
問題が解決しました。
Windows updateを削除してみる
更に、セーフモードで最新の品質向上プログラムをアンインストールしてみました。
問題は解決したままです。
再度windows updateしてみる
問題は発生しませんでした。
結局、windows updateを一度削除した時点で問題は解消、その後、再度適用しても問題は発生しませんでした。
その後、フォントキャッシュ破損が再発した
windws updateの再インストールで一度は解決したと思いました。しかし、その後、21H1をインストールするとまた同じ現象が発生しました。
同じようにアンインストール、再インストールと行いましたが、今度は解決ませんでした。
キャッシュを削除して再起動すると正常に表示されることもありましたが、再現性は怪しい感じでした。
その後、いろいろやりましたが、結局使い物にならんという結論になったので、フォントキャッシュサービスを停止することで対応しました。
フォントキャッシュサービスをコマンドラインで停止する
セーフモードでPCを起動して、以下のコマンドを実行します。
del FNTCACHE.dat
sc
config "FontCache"
start= disabled
フォントキャッシュサービスを停止した影響でしょうか、PCの起動が若干早くなった気がします。
便利なソフト
使っていないけど、こういうソフトがあるので、コマンドプロンプトを使えない時には便利だと思います。
フォントキャッシュが破損しているとエクスプローラーが使えないので、desktopにショートカットを置いておくなど、どのような状況でも起動できるようにしておく必要があります。
システムの修復でも解決できる可能性あり
システムファイルが壊れている場合は自動で修復できるようになってるので、そちらを使う方が正しい対処方法なのかもしれません。
コマンドプロンプトで2つのコマンドを実行すれば修復が行われます。それぞれ別の修復コマンドなので実行する順番は関係ありません。
dism /online /cleanup-image /restorehealth
sfc /scannow
どうしても解決しない場合の最終手段
対策1:フォントキャッシュサービスを停止
FNTCACHE.DATファイルを生成しないようにサービス自体を停止してしまう方法があります。
PCの立ち上がりが早くなる効果があるようです。また、サービス停止の影響はほとんどないようです。
対策2:FNTCACHE.DATを読み取り専用にする
一度うまく動いた状態で、FNTCACHE.DATを読み取り専用に変更してしまうことで、ファイルの破損が防げるようです。
- C:\WINDOWS/system32 を開きます。(環境によってパスは異なります。)
- system32フォルダ内から「FNTCACHE.DAT」を探します。
- FNTCACHE.DATを右クリック→プロパティを開きます。
- ファイルの属性「読み取り専用」にチェックを付け、OKを押します。
悪影響が無いのかどうかは不明です。
対策3:FNTCACHE.DATを毎回自動生成する
破損したFNTCACHE.DATを毎回削除するようにする方法もあるようです。
こちらは、かなり手順が複雑なので試すのも結構大変だとおもいます。
まとめ
今回の問題は、windows update起因であることは間違いないかと思っています。
また、フォントキャッシュを削除して解決したことから、フォントキャッシュが破損していたことも間違いないと思います。
なんで1回目のフォントキャッシュ削除で解決しなかったのかよくわかりませんが、ひとまず解決してよかったです。
最終的には、windows updateをアンインストールして、再インストールするということで解決しました。
FNTCACHE.datはだれが作っているのか?
FNTCACHE.datをセーフモードで削除後、フォントキャッシュサービスを停止しても、PCを再起動するとFNTCACHE.datは作成されました。
ということは、FNTCACHE.datはフォントキャッシュサービスが作成していないことになります。
また、PC再起動してもFNTCACHE.datのタイムスタンプは更新されないので、FNTCACHE.datが無い時のみPC起動時に作成されるようです。
FNTCACHE.datはいつ破損するのか?
PC起動後にFNTCACHE.datが破損する場合でも、PC起動時は常にフォントは正常に表示されていました。このことから、フォントキャッシュサービスが起動した後にFNTCACHE.datが破壊されているように思います。
その後、PC起動時に何度かキャッシュを読み直すタイミングがあり、その時点でPCの表示がおかしくなるようです。
フォントキャッシュサービスを停止すると表示が正常になる理由
PC起動時にはフォントはいつも正常に表示されていました。その後しばらくしてフォント表示がおかしくなることから、PC起動時に再構築されたFNTCACHE.datはいつも正常なようです。
その正常なFNTCACHE.datが、フォントキャッシュサービスを停止したことで破壊されなくなり、問題が発生しなくなったのだと思います。
フォントキャッシュサービスは止めても影響は無さそう
正常なFNTCACHE.datがあるのなら、フォントキャッシュサービスを使うメリットが殆どない気がします。
フォントキャッシュサービスはFNTCACHE.datを最初に作成せず、その後、破壊しているだけに見えるので、今回の対処で問題ないような気がします。
このような事例は検索しても見つからなかったので、もしこのような現象で困っている場合は、ダメもとで行ってみてください。
まとめると、以下のようになると思います。