A customer observed that the documentation for version resources describes strings like CompanyName and ProductName as “required”. But they found that if they omitted those strings, nothing bad seemed to happen. Furthermore, if they created an installer for their program, the installer allowed them to omit the company name. So how required can it be? If it’s actually required, why does the installer let you omit it?
The term “required” here is not a technical requirement in the sense of “a program that does not provide this information is invalid”. Rather, it is a “very strong recommended in order to be a good citizen.”
Programs that read version information expect to find a company name and product name, and if you don’t have one, they may not be happy about it.
For example, a low-stakes consequence of not providing the information is that in places where system would normally show the name of an app (for example, labels for grouped taskbar items), your app shows up with no name. Or a usage report shows usage attributed to an untitled program.
A consequence with slightly higher stakes is user confusion, like a dialog box that says “The program  has stopped working. If this problem persists, contact  for support.” Since you didn’t provide a program name or company name, the insertions into the error string are blank, and the result is a confusing error message.
A much higher stakes consequence is application compatibility. The application compatibility system uses various signals to identify apps that require compatibility accommodations. The file’s version resource is one of those signals, since that contains the application version number, as well as information to help distinguish which of several apps this autorun.exe executable belongs to. If you don’t provide these additional identifying details, the application compatibility system has to rely on other signals to identify your program, and those other signals are naturally less reliable than just seeing the value Contoso Corporation right there in the CompanyName string.
If there is a false negative, then the compatibility accommodation will not be activated for your program, and your program may not run reliably or as intended. Even worse, a false positive means that the compatibility accommodation will be activated for other programs by mistake, and that might impair those other programs and prevent them from running as intended. So now you have two programs that don’t work: Yours and the program that the compatibility accommodation was mistakenly applied to.
So please set your CompanyName, ProductName and other “required” field. It makes everybody’s lives much easier (and in the case of compatibility accommodations, that includes your program).
What if you have no company?
Use your organization/affiliation (e.g. “Mozilla Foundation”, “Library of Congress”, “SCP Cybersecurity”), if you can. If you haven’t one of those, make a distinctive one up (e.g. “IS4 Productions”, “Izak Symmons IV’s Bootleg Software”, “‘Don’t Ask, Don’t Tell’ Developers”).
As an example of the "make up a distinctive one" advice: on the Microsoft store my apps listed as being from "Shipwreck Software". But there's no legal entity called that; it's not registered in any court or in any tax office. In America, there's a long history of what are called "DBA"s: "Doing Business As". It's where a person performs some services and they come up with some catchy name. But it's just a person "doing business as" that name.
Or, in the new Bluetooth Accessory Guidelines from the Windows Bluetooth team: Bluetooth accessories have a way to include a manufacturer...
And yet, even though `CompanyName` is “required” and is actually shown in the _mouse over_ in Windows Explorer (WIn11), it is _not_ shown on the Properties details page.
But the Properties details page _will_ actually show the `LegalCopyright` field, although that one is marked as optional in the docs. 🙂
It seems there might be an interesting story behind which fields the Properties details dialog of Windows shows or omits.
You know what else isn’t required? Having a resource section. Sub 1-kb hello world is real.
I interpreted the documentation as if you have a VERSIONINFO you need to fill out these two fields or some other program gets an unexpected NULL interpreting the versioninfo struct and has a bad day.
If Windows gets a null for Program Name it really should put the executable file name — most likely in such a program the executable name is meaningful.
I disagree, I can think of a few weird reasons.
What if
failed? Or more
, maybe any of those random non-sensical examples?
I’ve recently named a project of mine ‘Norman’ after what it does (Normalize), but it does nothing to identify itself from whatever company I’m from.
Even if the meaning of the filename isn’t obvious, it’s at least something that a user can search the internet for, and that can help the devs debug more easily.