私は、実行可能ファイルのバージョンを取得するためのpythonを使用したい、と私はこれを行うためにそれを使用する方法pefile.pyファイル(.exeファイル)を取得するには、「pefile.py」を使用して、バージョン
を知っていますか?
注:実行可能ファイルが完全ではない可能性があります。
私は、実行可能ファイルのバージョンを取得するためのpythonを使用したい、と私はこれを行うためにそれを使用する方法pefile.pyファイル(.exeファイル)を取得するには、「pefile.py」を使用して、バージョン
を知っていますか?
注:実行可能ファイルが完全ではない可能性があります。
Windowsプログラムのバージョン番号は、PE形式のヘッダーではなく、プログラムファイルのリソースセクションに格納されます。私はpefile.py
に慣れていないので、リソースセクションも直接処理するかどうかはわかりません。そうでない場合は、this MSDN articleに必要な情報を見つけることができます。
「実行可能ファイルバージョン」とは、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です。
ここで何をしたいん完全なスクリプトの例です:という
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)
のみ、我々はこれらのプロパティで意味のある何かを持っていることを確認した後に起こるすべては。
ありがとうC22非常に便利なヒント –
問題のモジュールがプラットフォームに依存しないが、あなたの答えはWin32固有のモジュールに依存しています。これが私が答えをdownvoteすることを決めた理由です。 – 0xC0000022L
0xC0000022L彼はpefile.pyについて言及していますが、クロスプラットフォームであることを意味するかどうかは不明です。彼は一般的にWindowsのものである ".exe"を指しています。また、私は「Windows上でのあなたのことを仮定している」と言っていたので、私の答えはクロスプラットフォームではないことは明らかでした。私はあなたのdownvoteがベストであると思っています。(OPが明らかにする前に)何が... –
モジュール 'pefile'自体はクロスプラットフォームです。 – 0xC0000022L