Vista Fonts Suddenly Missing
At some point yesterday around 400 fonts got deleted from my system. I didn’t realise what had happened at first however I did notice that Flash and Photoshop both crashed during startup at the point when they were loading fonts. I put it down to the system needing a restart due to a ton of updates to various apps and Windows itself being recently installed. Today when I did a full restart I found that IE7, Opera 9 and Chrome displayed every page in italics. FF3 displayed every page in bold. I did a bit of digging which is when I discovered that a large number of fonts had been deleted, these included both the Arial and Courier “Normal” fonts. I tried a number of things before finding a working solution.
I’ll list them out so you can try them if you feel motivated enough, or you can just skip to what worked for me
Manually copy and pasting the missing fonts into the Fonts directory
This is how I usually install new fonts so it was the first thing I thought to do. This method simply involved selecting all the fonts in the shadow copied directory and copy and pasting them into the WindowsFonts directory. After a kazillion “Do you want to replace x font?” dialogues I found that it had infact not copied any of the missing fonts. Dud attempt #1.
Restore a Shadow Copy of the Fonts directory
I’m running Vista 64 and have Shadow Copies enabled so I just right clicked the WindowsFonts directory and chose “Properties”, then picked the “Previous Versions” tab. I could see a single previous version timed and dated last night at around 7pm. I selected that and then “Copy” since “Restore” was greyed out. I put the copy in my downloads directory then opened a command prompt inside that new font directory and typed:
xcopy /R /F /Y *.* C:WindowsFonts
Then just left it chugging through them all. When it had finished I found that it had not actually added any of the missing fonts, just replaced the ones that we’re currently there. Dud attempt #2.
Run the System File Checker
I opened an administrative command prompt and typed:
That chugged away for about 5 minutes and then came back stating everything was A-OK. Yer right. Dud attempt #3.
Clear the Font cache file
I tried deleting the font cache file WindowsSystem32FNTCACHE.DAT and restarting so it could be recreated. Still no joy. Dud attempt #4.
Let Windows install the fonts
The best thing I’ve found so far is to go into the WindowsFonts directory, right click a blank area and choose “Install New Font”. This opens an archaic looking dialogue that lets you browse to a directory to install fonts from. I chose my shadow copied directory and then “Select All” and “Install”. Then it was a case of holding down the “y” key to say “Yes” to the zillion “Do you want to replace x font?” popups. There is no “Replace All” option. Bingo! Attempt #5 was a winner, law of 5 rules once again
So what caused this chaos?
My biggest hunch is that it was caused by installing “Left 4 Dead” a PC game about caring for cute little bunny rabbits I like to dig through game directories to find textures, sound effects and shader files. Whilst checking out the L4D directory structure I found a “fonts” directory. Inside there were a few fonts named after system fonts, amongst others, I wondered what the point of those where since everyone with Windows would already have them installed (the Core Fonts) so I double clicked the “Arial.ttf” file and another whose name I’ve forgotten, it began with an “x” or a “z”. Both failed to open so I left it and carried on my scavenger hunt. Later on is when I unsuccessfully tried to open Flash and Photoshop. I didn’t link the two things until today when I realised my system was properly buggered. I suspect that opening one or both of those font files somehow killed my font cache which in turn somehow deleted font files out of my system directory. It might be more innocent than that and it might of been when I uninstalled the game. Without repeating the process I’ll never know but I’m not really motivated or inclined enough to try it, one major font meltdown is enough for me.