How do I set the version information for an existing .exe, .dll?
While it's not a batch process, Visual Studio can also add/edit file resources.
Just use File->Open->File on the .EXE or .DLL. This is handy for fixing version information post-build, or adding it to files that don't have these resources to begin with.
Unlike many of the other answers, this solution uses completely free software.
Firstly, create a file called Resources.rc
like this:
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
{
BLOCK "StringFileInfo"
{
BLOCK "040904b0"
{
VALUE "CompanyName", "ACME Inc.\0"
VALUE "FileDescription", "MyProg\0"
VALUE "FileVersion", "1.0.0.0\0"
VALUE "LegalCopyright", "© 2013 ACME Inc. All Rights Reserved\0"
VALUE "OriginalFilename", "MyProg.exe\0"
VALUE "ProductName", "My Program\0"
VALUE "ProductVersion", "1.0.0.0\0"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x409, 1200
}
}
Next, use GoRC to compile it to a .res
file using:
GoRC /fo Resources.res Resources.rc
(see my comment below for a mirror of GoRC.exe
)
Then use Resource Hacker in CLI mode to add it to an existing .exe
:
ResHacker -add MyProg.exe, MyProg.exe, Resources.res,,,
That's it!
Or you could check out the freeware StampVer for Win32 exe/dll files.
It will only change the file and product versions though if they have a version resource already. It cannot add a version resource if one doesn’t exist.
rcedit is relative new and works well from the command line: https://github.com/atom/rcedit
$ rcedit "path-to-exe-or-dll" --set-version-string "Comments" "This is an exe"
$ rcedit "path-to-exe-or-dll" --set-file-version "10.7"
$ rcedit "path-to-exe-or-dll" --set-product-version "10.7"
There's also an NPM module which wraps it from JavaScript and a Grunt task in case you're using Grunt.
What about something like this?
verpatch /va foodll.dll %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%
Available here with full sources.