2009-08-12 4 views

答えて

0

Windowsプログラムのバージョン番号は、PE形式のヘッダーではなく、プログラムファイルのリソースセクションに格納されます。私はpefile.pyに慣れていないので、リソースセクションも直接処理するかどうかはわかりません。そうでない場合は、this MSDN articleに必要な情報を見つけることができます。

0

「実行可能ファイルバージョン」とは、a)Windowsの場合、b)プロパティ、詳細タブの「ファイルバージョン」に表示されている情報を意味します。pywin32パッケージを使用して次のようなコマンドで取得できます:0x60000メジャー/マイナー番号(6.0)を有し、0x17714650が(10進数0x1771と0x4650、または6001および18000)は、2つの別個の単語として扱わ場合は、次の2つであることを

>>> import win32api as w 
>>> hex(w.GetFileVersionInfo('c:/windows/regedit.exe', '\\')['FileVersionMS']) 
'0x60000' 
>>> hex(w.GetFileVersionInfo('c:/windows/regedit.exe', '\\')['FileVersionLS']) 
'0x17714650' 

注値に対応します私のマシンでは、regeditのバージョンは6.0.6001.18000です。

+0

問題のモジュールがプラットフォームに依存しないが、あなたの答えはWin32固有のモジュールに依存しています。これが私が答えをdownvoteすることを決めた理由です。 – 0xC0000022L

+0

0xC0000022L彼はpefile.pyについて言及していますが、クロスプラットフォームであることを意味するかどうかは不明です。彼は一般的にWindowsのものである ".exe"を指しています。また、私は「Windows上でのあなたのことを仮定している」と言っていたので、私の答えはクロスプラットフォームではないことは明らかでした。私はあなたのdownvoteがベストであると思っています。(OPが明らかにする前に)何が... –

+0

モジュール 'pefile'自体はクロスプラットフォームです。 – 0xC0000022L

2

ここで何をしたいん完全なスクリプトの例です:という

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])) 

関連する行:

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) 

のみ、我々はこれらのプロパティで意味のある何かを持っていることを確認した後に起こるすべては。

+0

ありがとうC22非常に便利なヒント –

関連する問題