Can anyone shed some light on what all of these different version stamps are used for and how they differ from one another?

In a PB COM object we can set a version number like this:

Code:
[B]#Com Name "EPSON_Ethernet", 1.00[/B]
In a resource file we can set multiple version numbers like this:

Code:
#include "C:\PBWin90\WinAPI\resource.h"
// * Version info.
//
//
VS_VERSION_INFO VERSIONINFO
[B]FILEVERSION 1, 0, 0, 0[/B]
[B]PRODUCTVERSION 1, 0, 0, 0[/B]
FILEOS VOS_WINDOWS32
FILETYPE VFT_APP
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "040904B0"
    BEGIN
      VALUE "Comments",         "ProjectorNET - Projector Monitoring and Control Software\x00"
      VALUE "CompanyName",      "Echo Development, LLC\x00"
      VALUE "FileDescription",  "Interface Object for EPSON (Ethernet) Projectors\x00"
[B]      VALUE "FileVersion",      "1.00.0000\x00"[/B]
      VALUE "InternalName",     "EPSON_Ethernet\x00"
      VALUE "OriginalFilename", "EPSON_ETHERNET.DLL\x00"
      VALUE "LegalCopyright",   "Copyright \xA9 2009 Echo Development, LLC\x00"
      VALUE "ProductName",      "EPSON_Ethernet\x00"
[B]      VALUE "ProductVersion",   "1.00.0000\x00"[/B]
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x409, 0x4B0
  END
END
 1  typelib EPSON_ETHERNET.TLB
Are there different uses/shades of meaning for each of these version numbers?
Are the two fileversion entries in the resource file redundant?
Are the two productversion entries in the resource file redundant?

-Wes