Not sure if anyone's posted the underlying cause for this change in font installation behaviour, but I had to fix this in my environment and here's what I found:
As of build 1809 (I think?) Microsoft changed the way fonts install in the OS - in order to allow non-admin-privilege users to install fonts, the default behaviour is to install a new font under the user profile and -- importantly -- add it to a new section
of the registry. My suspicion is that most the application problems being posted on here is due the apps referencing the original 'all users' reg location for fonts. As previously posted, running the 'Install for all users' option fixes it, but that doesn't
help if you're looking for a scripted solution.
Long story short, I wrote a PowerShell script to install the fonts for all users for our OS Deployment Task Sequences in SCCM. It copies the fonts to the main C:\Windows\Fonts directory and creates the required registry entries to make the fonts appear for
all users:
<#
.SYNOPSIS
Installs fonts used for [Company Name] brand.
.DESCRIPTION
Installs [Company Name] fonts using new method/syntax required for Windows 10 1809 or greater.
Error Log: C:\Temp\Install-CompanyFonts.log
.NOTES
Create a folder named Fonts in the same location as the script, and copied desired Open-Type or True-Type font files into this folder.
Revision:
#>
$logfile = "C:\Temp\Install-CompanyFonts.log"
Function Write-ToLog {
Param (
# Message text to be added to log file
[Parameter(Mandatory=$true)]
[string]
$Message
)
# Set timestamp
$timestamp = Get-Date -Format u
# Write log file entry
"$($timestamp) : $Message" | Out-File $logfile -Append
}
#Timestamp log file entry
#Write-Host "Time-stamping log file entry..." -ForegroundColor Yellow
Write-ToLog "START"
Set source files and destination
$source = "$PSScriptRoot\Fonts"
#Write-ToLog "Fonts to install: $($source | measure | select -ExpandProperty Count)"
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.namespace($source)
Copy each font to system font directory and create matching registry value
foreach ($font in $objFolder.items()) {
# Generate values needed for reg key
$fontName = $($objFolder.getDetailsOf($font, 21))
$fileType = $($objFolder.getDetailsOf($font, 2))
$fontType = "(",$fileType.replace(' font file',''),")" -join ""
$regKeyName = $fontName,$fontType -join ' '
# Check that font isn't already installed and is a TrueType / OpenType font
if (!(Test-Path "C:\Windows\Fonts$($font.Name)") -AND (($fileType -eq 'OpenType font file') -OR ($fileType -eq 'TrueType font file'))) {
Try {
Copy-Item -Path $font.Path -Destination "$env:windir\Fonts"
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" -Name $regKeyName -Value "$($font.Name).otf" -PropertyType String -Force
Write-ToLog "Installed font $($font.Name)"
} Catch {
Write-ToLog "Failed to install font $($font.Name)"
}
} Else {
Write-ToLog "Failed to install font: $($font.Name) | File already exists or font is not OpenType/TrueType"
}
}
Write-ToLog "FINISH"