Here is a complete example script that does what you want:
import sys def main(pename): from pefile import PE pe = PE(pename) if not 'VS_FIXEDFILEINFO' in pe.__dict__: print "ERROR: Oops, %s has no version info. Can't continue." % (pename) return if not pe.VS_FIXEDFILEINFO: print "ERROR: VS_FIXEDFILEINFO field not set for %s. Can't continue." % (pename) return verinfo = pe.VS_FIXEDFILEINFO filever = (verinfo.FileVersionMS >> 16, verinfo.FileVersionMS & 0xFFFF, verinfo.FileVersionLS >> 16, verinfo.FileVersionLS & 0xFFFF) prodver = (verinfo.ProductVersionMS >> 16, verinfo.ProductVersionMS & 0xFFFF, verinfo.ProductVersionLS >> 16, verinfo.ProductVersionLS & 0xFFFF) print "Product version: %d.%d.%d.%d" % prodver print "File version: %d.%d.%d.%d" % filever if __name__ == '__main__': if len(sys.argv) != 2: sys.stderr.write("ERROR:\n\tSyntax: verinfo <pefile>\n") sys.exit(1) sys.exit(main(sys.argv[1]))
Matching lines:
verinfo = pe.VS_FIXEDFILEINFO filever = (verinfo.FileVersionMS >> 16, verinfo.FileVersionMS & 0xFFFF, verinfo.FileVersionLS >> 16, verinfo.FileVersionLS & 0xFFFF) prodver = (verinfo.ProductVersionMS >> 16, verinfo.ProductVersionMS & 0xFFFF, verinfo.ProductVersionLS >> 16, verinfo.ProductVersionLS & 0xFFFF)
all this happens only after verifying that we have something meaningful in these properties.
source share