How to create a MSI for deploying Fonts in Enterprise?

Like me you may need to deploy Fonts in your Enterpise network via Active Directory.

In past we have seen some tools on the net that made this Font installation an easy task, but all of them have faded away or have been commerialized with questionable feature lists in basic payed version. It took me an unacceptable hard time to find the way to go as the search results give tons of bad results and none of these tools around is really easy to use. I wished I would have found a GUI tool that works like drag and drop, browse registry and other stuff to create at least easy type setups, but this seems only to be a very big wish. After some weeks with MSI and WiX I understand more and more that such a tool cannot be easy - except it would be very limited in functionality and what is more worse than using 5 tools in a long term view? In a small world you may only need a Font installer, but later you need much more and it's better to learn MSI and WiX the hard way. You cannot get around if you need to deploy software in daily business.

I refused to buy Advanced Installer (it looked the best to me) or any other expensive tool that are mostly limited in it's basic versions and very expensive in the full features versions you really need and will also not really help you much to understand how MSI really works or looks like. But if they grabbed you, you are in their arms and will push more and more money in - to upgrade to the version you really need. I've gone down the road and started to get familiar with Microsofts open source WiX Toolkit (XML) what is more down to the roots as there are not 100 wizards that hide everything from you and miss stuff you need to do. It took me more time to find the proper wizards than it took me to find and add the lines in WiX XML. After days of a strong learning curve with many setup reviews and by migrating suxxx NSIS setups from many other open source tools to WiX - I've created the first Font installer that was really done in a few minutes.

Creating a MSI-Installer for Fonts with WiX is really one of the easiest MSI setups I can think of. It's really sooo easy that I'm just sharing the example WiX script that you are able to customize with your own Fonts. You just need to rename the font names and build the setup for Active Directory deployment.

Required:

Fonts installer example with possible upgrade path

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <?define ProductName = "Fonts - MyExampleFontPackage" ?>
    <?define ProductVersion="1.0.0" ?>
    <?define SkuName = "MyExampleFont" ?>
    <?define Manufacturer="My Company"?>
    <?define UpgradeCode="{PUT-GUID-HERE}"?>
    <?define RTMProductVersion="0.0.1" ?>
    <Product Id="*" Name="$(var.ProductName)" Language="1033" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)">
        <Package Description="$(var.ProductName)" InstallerVersion="200" Compressed="yes" />
        <Media Id="1" Cabinet="MyExampleFont.cab" EmbedCab="yes" />
        <Upgrade Id="$(var.UpgradeCode)">
            <UpgradeVersion OnlyDetect="yes" Minimum="$(var.ProductVersion)" Property="NEWPRODUCTFOUND" IncludeMinimum="no" />
            <UpgradeVersion Minimum="$(var.RTMProductVersion)" IncludeMinimum="yes" Maximum="$(var.ProductVersion)" Property="UPGRADEFOUND" IncludeMaximum="no" />
        </Upgrade>
        <CustomAction Id="PreventDowngrading" Error="Newer version of $(var.ProductName) is already installed." />
        <InstallExecuteSequence>
            <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
            <RemoveExistingProducts After="InstallFinalize" />
        </InstallExecuteSequence>
        <InstallUISequence>
            <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
        </InstallUISequence>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="FontsFolder" Name="FontsFolder">
                <Component Id="FONT1.TTF" DiskId="1" Guid="18B25073-3FB2-40DC-B750-597BBD55D4B5">
                    <File Id="FONT1.TTF" Name="MyExampleFont-1.ttf" Source="..\SourceDir\MyExampleFont\MyExampleFont-1.ttf" TrueType="yes" />
                </Component>
                <Component Id="FONT2.TTF" DiskId="1" Guid="18B25073-3FB2-40DC-B750-597BBD55D4B5">
                    <File Id="FONT2.TTF" Name="MyExampleFont-2.ttf" Source="..\SourceDir\MyExampleFont\MyExampleFont-2.ttf" TrueType="yes" />
                </Component>
            </Directory>
        </Directory>
        <Feature Id="DefaultFeature" Title="Main Feature" Level="1">
            <ComponentRef Id="FONT1.TTF" />
            <ComponentRef Id="FONT2.TTF" />
        </Feature>
        <UI />
    </Product>
</Wix>

How to build the Font MSI setup:

"%WIX%bin\candle.exe" MyExampleFont.wxs
"%WIX%bin\light.exe" MyExampleFont.wixobj -spdb -out "MyExampleFont.msi"
Attachment Size
MyExampleFont.wxs (2.43 KB) 2.43 KB
Rating
Average: 7.3 (31 votes)