Difference between revisions of "Fonts"
(→fontreg.exe Method) |
|||
Line 170: | Line 170: | ||
A simple method is using fontreg.exe from http://code.kliu.org/misc/fontreg/ | A simple method is using fontreg.exe from http://code.kliu.org/misc/fontreg/ | ||
− | Just copy the font files to the Windows font directory and call fontreg.exe | + | Just copy the font files to the Windows font directory and call |
+ | <pre> | ||
+ | fontreg.exe | ||
+ | </pre> | ||
− | + | Fontreg will check the directory and add the new fonts to the registry. It will also remove stale registry keys. | |
Alternativly call | Alternativly call |
Revision as of 11:21, 16 November 2012
This is a silent installer for distributing additional fonts. Always be sure to be entitled to use the fonts you are distributing.
Contents
Batch File Method
Basic info
To install new fonts on a Windows machine, you have to do two things:
- copy the font file to
%WINDIR%\Fonts\
directory, - add a registry entry.
Example Batch file
An example.bat file would look like this:
%COMSPEC% /c copy /Y "%SOFTWARE%\Fonts\*.TTF" "%WINDIR%\Fonts\"
regedit /s "%SOFTWARE%\Fonts\add-fonts.reg"
Example Registry file
An example registry file would look like this:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts]
"Frankfurt Gothic (TrueType)"="FRANKGON.TTF"
Example XML install file for WPKG
<?xml version="1.0" encoding="UTF-8"?>
<packages>
<package id="additional-fonts" name="Additional fonts" revision="1" reboot="false" priority="950" execute="once">
<install cmd='"%SOFTWARE%\Fonts\add-fonts.bat"' />
</package>
</packages>
VBScript Method
Example using a VBscript
The Microsoft Scripting Guys provide a .vbs solution that does not require a restart, as it copies the fonts using the shell object so windows automatically installs the new fonts.
<package id="additional-fonts" name="Additional fonts" revision="1" reboot="false" priority="950" execute="once">
<install cmd='wscript.exe "%SOFTWARE%\Packages\Fonts\FontInstall.vbs"' />
</package>
FontInstall.vbs:
Const FONTS = &H14&
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(FONTS)
MyDir = left(Wscript.ScriptFullName,len(Wscript.ScriptFullName)- len(Wscript.ScriptName)-1)
objFolder.CopyHere MyDir &"\MyNewFont.ttf"
Or, to install all .ttf, .otf, .pfm, .fon files from the folder containing your FontInstall.vbs script:
Const FONTS = &H14&
Set objShell = CreateObject("Shell.Application")
Set ofso = CreateObject("Scripting.FileSystemObject")
SourceFolder = ofso.GetParentFolderName(Wscript.ScriptFullName)
Set oSource = objShell.Namespace(SourceFolder)
Set oWinFonts = objShell.Namespace(FONTS)
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Pattern = "([\w\s]+?)(_[^_]*)?(\.(ttf|otf|pfm|fon))$"
FOR EACH FontFile IN oSource.Items()
fontFileName = ofso.GetFileName(FontFile.Path)
IF regEx.Test(fontFileName) THEN
Set objMatch = regEx.Execute(fontFileName)
win7FontFileName = objMatch.Item(0).Submatches(0) & objMatch.Item(0).Submatches(2)
localFontPath = oWinFonts.Self.Path & "\" & fontFileName
win7LocalFontPath = oWinFonts.Self.Path & "\" & win7FontFileName
IF NOT ofso.FileExists(localFontPath) AND NOT ofso.FileExists(win7LocalFontPath) THEN
oWinFonts.CopyHere FontFile.Path
END IF
END IF
NEXT
Inno Method
Example Inno Setup Script
Because I had problems with the registry setting I found another way to install fonts by writing an installer. Inno Setup makes this easy and a script like the following will package a number of fonts into a pseudo-application.
[Files]
Source: C:\WINDOWS\Fonts\CALIBRI.TTF; DestDir: {fonts}; FontInstall: Calibri; Flags: onlyifdoesntexist uninsneveruninstall
Source: C:\WINDOWS\Fonts\FuturaStd-Book.otf; DestDir: {fonts}; FontInstall: FuturaStd-Book (OpenType); Flags: onlyifdoesntexist uninsneveruninstall fontisnttruetype
...
[Setup]
AppName=Font Installer
AppVerName=Font Installer 1.0
CreateAppDir=false
DisableProgramGroupPage=true
ShowLanguageDialog=no
The package definition would be
<package id="additional-fonts" name="Additional fonts" revision="10" reboot="false" priority="950">
<check type="uninstall" condition="exists" path="Font Installer 1.0" />
<install cmd='%SOFTWARE%\font-setup.exe /sp- /silent /norestart' />
<upgrade cmd='%SOFTWARE%\font-setup.exe /sp- /silent /norestart' />
</package>
Example Inno Setup Script PS Type 1 Fonts
I tested this with success on Windows XP Machines with PS Type 1 Fonts. Copy the font and add the registry entry in the right section. After a reboot the font is fully installed. Adopt the silent install script for WPKG from above.
[Setup]
AppName=Font Installer
AppVerName=Font Installer 1.0
CreateAppDir=false
DisableProgramGroupPage=true
ShowLanguageDialog=no
[Files]
; FontInstall does not work with my SP3
Source: "BENSCNBL.PFB"; DestDir: "{fonts}"; Flags: onlyifdoesntexist
Source: "BENSCNBL.pfm"; DestDir: "{fonts}"; Flags: onlyifdoesntexist
[Registry]
; Create Registry entrys for the fonts
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Type 1 Installer\Type 1 Fonts"; ValueType: multisz; ValueName: "BentonSansCond Black"; ValueData: "T{break}BENSCNBL.pfm{break}BENSCNBL.PFB"; Flags: uninsdeletevalue
MS fontinst.exe Method
Microsoft has a very underused app called fontinst.exe. You can pass a .inf file as parameter to fontinst.exe and it will install a list of fonts for you.
The .inf file is formatted like this:
[fonts] font01.TTF font02.TTF font03.TTF
Just pop the exe, ttf's and the inf in a folder and call it like this:
fontinst.exe /F MyFontName.inf
However, fontinst.exe appears to be a 16bit application, and will not run on an x64 system.
fontreg.exe Method
A simple method is using fontreg.exe from http://code.kliu.org/misc/fontreg/
Just copy the font files to the Windows font directory and call
fontreg.exe
Fontreg will check the directory and add the new fonts to the registry. It will also remove stale registry keys.
Alternativly call
fontreg.exe /copy
This will copy all font files from the current directory to the windows font directory and registry them.