Software tag

A software tag is a small XML file that tells a company's asset and license tools exactly what product is installed, who made it, and whether it needs a license. Home users never see it. Companies that buy your product for many people rely on it. This section writes the tag when the product installs and deletes it when the product is removed.

8 min read
In the app: ? next to the title of Software tag opens this page.

What a software tag is

A software tag — a SWID tag, from Software Identification — is a file described by the international standard ISO/IEC 19770-2. It names the product, its version, the company that made it and the one that licenses it, and a few facts about its license. The installer writes it as the product installs — in the install folder or in C:\ProgramData, depending on the form of the standard — and the uninstaller takes it away.

Your program never reads the tag, and nothing changes for the person who installs it. The tag is there for the company's IT department.

Who reads it

Companies keep track of the software on their computers with software asset management (SAM) tools. They scan every computer, list what is installed, and compare it with the licenses the company bought.

ToolWhat it reads
Microsoft Configuration ManagerTags of the 2009 form, in its software inventory (the SMS_SoftwareTag class)
FlexeraTags of both forms, in ProgramData and Program Files
SnowTags of both forms, including ProgramData\regid.*
IBM License Metric Tool, BigFix InventoryTags of the 2015 form; recent versions also the older one
Security and compliance scannersName, publisher and version, to match installed products to vulnerability lists

Without a tag these tools guess the product from its entry in the list of installed apps, and the same product may be named a little differently in each version. With a tag they know it for certain. Microsoft and Adobe ship tags for their products: look in C:\ProgramData\regid.1991-06.com.microsoft.

Who needs it

The section is off until you switch on Write a software tag. Every field of the tag is on the page, in one group, and nothing is taken from other sections unless a field says so with a value such as {Publisher}.

Which form

The standard has two forms, and the tools in use read one or the other. Form of the standard chooses which one the installer writes.

2015 — current2009 — first
Who reads itNewer tools: IBM's, Flexera, SnowConfiguration Manager, and every tool that reads Microsoft's and Adobe's tags
Where the file goesswidtag in the install folder, as the 2015 standard places itC:\ProgramData\<regid>, as Microsoft and Adobe place theirs
What it can sayEverything but the channel name and the customerEvery field of the section

Take 2015 unless you know your customers' tools want the first form. Take 2009 when they use Configuration Manager, or when the channel name and the customer matter to you: the 2015 form has no place for them. The fields stay on the page either way, marked Written only in the 2009 form, so switching back and forth loses nothing.

Write one form only: two tags of one product would be counted as two installs.

Each field

FieldIn 2015In 2009What to put there
Tag idtagIdsoftware_id/unique_idThe tag's own id. Made when you switch the tag on. Keep it the same in every version of the product.
Namenameproduct_titleThe product's name: {ProductName} by default.
Versionversionproduct_versionThe product's version: {Version} by default. In 2009 its numbers are also written one by one: major, minor, build, review.
Made by, and its regidEntity role="softwareCreator"software_creatorThe company that made the software.
Licensed by, and its regidEntity role="licensor"software_licensorThe company that licenses it to users. Usually the maker; another company when it sells the product under its own name.
Tag made by, and its regidEntity role="tagCreator"tag_creatorWho made the tag: usually the maker. Its regid also names the file, and in 2009 its folder.
Using it needs a licenseMeta entitlementDataRequiredentitlement_required_indicatorSwitch it on for a paid product: asset tools then count its installs against licenses.
Serial numberMeta entitlementKeyserial_numberThe copy's serial or license key, usually given as it installs.
ChannelMeta channelTypelicense_linkage/channel_typeHow this build is sold.
Channel name—license_linkage/channel_nameWho sold it, when not you.
Customer—license_linkage/customer_typeWhom the build is for.

In 2015, when the same company plays several roles with the same name and regid, the tag has one Entity with all of its roles.

Fields that take values work as everywhere in Cobalt Installer: {Publisher}, {ProductName}, your own values from Properties and variables. The project's values are filled in when the setup is built; values known only on the user's computer, and values given on the command line, when it installs. Characters that XML does not allow as they are, such as & and <, are written safely for you.

The regid

A regid names an organization in a way that never repeats. It is made of three parts:

regid.2009-04.com.example
      ─┬───── ─┬─────────
       │       └ your domain, written backwards: example.com → com.example
       └ the year and month the domain became yours

The year and month keep the regid unique even if the domain changes hands one day: the next owner gets another month. Take the first full month your company owned the domain. If you don't know it exactly, a public WHOIS lookup shows when the domain was registered; then use the same regid for ever, for every product.

The … button next to a regid field makes one for you: it takes the site from Description, asks for the year and month, and shows the regid before you use it. The section says when a regid is not written the right way.

Most companies use the same regid for all three roles.

Tag id

The tag id identifies the product's tag across versions: an asset tool sees version 2 replace version 1 because both have the same id. Cobalt Installer makes a new one (a GUID) the first time you switch the tag on.

If your company already has tag ids for its products — from an earlier installer — put the product's old one here, so the tools see one product across the change.

Using it needs a license

Switch on Using it needs a license for a product that is bought. Asset tools then treat each install as one that must be covered by a license. Leave it off for free products and for free tools that come with a paid one.

Serial number

A serial number is different for each copy, so it is usually given as the product installs. Make a value of your own in Properties and variables — SERIAL, with An admin may give another on — and put {SERIAL} in the serial number field. An admin then installs with it:

CobaltPhoto-Setup.exe /S SERIAL=ACME-2026-0042

The serial number is kept with the product's entry, so an update writes the same one again.

Sale

Write how it was sold and to whom adds the channel and the customer. It is for a build made for one kind of sale: a volume build for companies next to a retail one, a build for a reseller.

ChannelWhen
RetailSold copy by copy, in a store or on your site
VolumeOne license for many users of one organization
OEMComes with a computer or a device
AcademicSold to schools and universities at their price
SubscriptionPaid for by the month or the year
OtherAny other way

Channel name is who sold it when it was not you: a reseller, a store. Customer is whom the build is for: a company, a government body, a school or university, a person. Both are written in the 2009 form only.

The standard gives examples of these words rather than a fixed list. The installer writes the ones vendors use: Retail, Volume, OEM, Academic, Subscription, Other for the channel; Corporate, Government, Educational, Retail (a person), Other for the customer.

The file

The file is named after the tag maker's regid and the tag id, so it is unique for your company and the product: regid.2009-04.com.example_7d3f5c1e-2b4a-4e8f-9c61-0a5b3d2e7f10.swidtag. Where it goes depends on the form:

FormFolder
2015<install folder>\swidtag, for example C:\Program Files\Cobaltsmith\Cobalt Photo\swidtag
2009C:\ProgramData\<regid of the tag maker>, for an install for everyone and for one for the current user alike

The page shows the file as it will be, with this computer's values in it. The same product in the 2015 form:

<?xml version="1.0" encoding="utf-8"?>
<SoftwareIdentity xmlns="http://standards.iso.org/iso/19770/-2/2015/schema.xsd"
                  name="Cobalt Photo" tagId="7d3f5c1e-2b4a-4e8f-9c61-0a5b3d2e7f10"
                  version="1.3.5.0" versionScheme="multipartnumeric">
  <Entity name="Cobaltsmith" regid="regid.2009-04.com.example" role="tagCreator softwareCreator licensor" />
  <Meta entitlementDataRequired="true" channelType="Volume" />
</SoftwareIdentity>

and in the 2009 form, its elements in the order the schema requires:

<?xml version="1.0" encoding="utf-8"?>
<software_identification_tag xmlns="http://standards.iso.org/iso/19770/-2/2009/schema.xsd">
  <entitlement_required_indicator>true</entitlement_required_indicator>
  <product_title>Cobalt Photo</product_title>
  <product_version>
    <name>1.3.5.0</name>
    <numeric><major>1</major><minor>3</minor><build>5</build><review>0</review></numeric>
  </product_version>
  <software_creator><name>Cobaltsmith</name><regid>regid.2009-04.com.example</regid></software_creator>
  <software_licensor><name>Cobaltsmith</name><regid>regid.2009-04.com.example</regid></software_licensor>
  <software_id><unique_id>7d3f5c1e-2b4a-4e8f-9c61-0a5b3d2e7f10</unique_id><tag_creator_regid>regid.2009-04.com.example</tag_creator_regid></software_id>
  <tag_creator><name>Cobaltsmith</name><regid>regid.2009-04.com.example</regid></tag_creator>
  <license_linkage>
    <channel_type>Volume</channel_type>
    <customer_type>Corporate</customer_type>
  </license_linkage>
</software_identification_tag>

Check what was written

After a test install (or in Sandbox test), PowerShell lists the tags on the computer and shows yours:

# 2009: in ProgramData
Get-ChildItem C:\ProgramData\regid.* -Recurse -Filter *.swidtag | Select-Object FullName
# 2015: in the install folder
Get-ChildItem "C:\Program Files\Cobaltsmith\Cobalt Photo\swidtag" -Filter *.swidtag | Get-Content