ใน Windows จะมีหน้าข้อมูลเวอร์ชันในหน้าต่างคุณสมบัติไฟล์เรียกทำงาน / ไลบรารี จะดูข้อมูลใน Ubuntu ได้อย่างไร?
ใน Windows จะมีหน้าข้อมูลเวอร์ชันในหน้าต่างคุณสมบัติไฟล์เรียกทำงาน / ไลบรารี จะดูข้อมูลใน Ubuntu ได้อย่างไร?
คำตอบ:
คุณอาจต้องติดตั้งโปรแกรมดูไฟล์ PE ของบุคคลที่สามเช่นhttp://www.ucware.com/apev/index.htm
ฉันกำลังทำงานในเครื่องมือที่เรียกว่าpevเพื่อดึงข้อมูลเกี่ยวกับไฟล์ PE บนบรรทัดคำสั่ง
เวอร์ชันของไฟล์สามารถดึงข้อมูลได้ด้วย-p
ตัวเลือก:
pev -p program.exe
PEV สามารถใช้ได้บน Ubuntu ในแพคเกจpev
จากgnome-exe-thumbnailer
สคริปต์แนะนำโดย Scott Ritchie:
wrestool --extract --raw --type=version inputfile.exe
แยกข้อมูลรุ่นแล้วพิมพ์ข้อมูลไบนารีบางอย่างที่ผสมกับข้อความ UTF-16 สคริปต์แปลงเป็นข้อความที่อ่านได้โดยการไพพ์ผ่าน:
tr '\0, ' '\t.\0' \
| sed 's/\t\t/_/g' \
| tr -c -d '[:print:]' \
| sed -r -n 's/.*Version[^0-9]*([0-9]+\.[0-9]+(\.[0-9][0-9]?)?).*/\1/p'
wrestool --extract --raw --type=version inputfile.exe | tr '\0, ' '\t.\0' | sed 's/\t\t/_/g' | tr -c -d '[:print:]' | sed -r -n 's/.*Version[^0-9]*([0-9]+\.[0-9]+(\.[0-9][0-9]?)?).*/\1/p'
คำสั่งโดยรวมแล้ว
wrestool
ให้บริการโดยicoutil
แพคเกจซึ่งมีให้เป็นแพ็คเกจ Debian มาตรฐานนับตั้งแต่ทางกลับ
| hexdump -C
icoutils
แพ็คเกจ
เพื่อเป็นทางเลือกแทนการใช้trและsedเพื่อแยกเอาต์พุตจาก @ mechanical-snail ของโซลูชันนี่คือ GNU stringsและ GNU grep version:
$ wrestool --extract --raw --type=version putty.exe | strings -el | grep Version -A 1
FileVersion
Release 0.65
ProductVersion
Release 0.65
UPDATE:
อีกทางเลือกหนึ่งคือexiftoolรุ่นล่าสุดโดย Phil Harvey (ขึ้นอยู่กับ perl และติดตั้งบน Linux ได้ง่ายถ้า distro ของคุณไม่มีมันยังใช้ได้กับ Mac และ Windows) มีตัวเลือกการจัดรูปแบบมากมาย
# Example with exiftool 10.47
$ exiftool -FileVersion -ProductVersion putty.exe
File Version : Release 0.67
Product Version : Release 0.67
libimage-exiftool-perl
?
หากคุณติดตั้งgnome-exe-thumbnailer
แพ็คเกจคุณสามารถดูหมายเลขรุ่นnautilus
ได้
รหัสการทำเช่นนี้ด้วยตนเองมีให้ใน /usr/bin/gnome-exe-thumbnailer.sh
ฉันเพิ่งค้นพบตัวเองว่าทำอย่างไรเพื่อสร้างข้อมูลไพทอนที่ไพเราะ (ฉันมองไปรอบ ๆ ตัวเองและปิดบังที่นี่ด้วยเหตุผลบางอย่าง) และต้องการนำเสนอวิธีการของฉันที่นี่:
Github Gists - spookyahell / exe2version_info.py
'''Licensed under the MIT License :)'''
import pefile
import pprint
pe = pefile.PE('example.exe')
string_version_info = {}
for fileinfo in pe.FileInfo[0]:
if fileinfo.Key.decode() == 'StringFileInfo':
for st in fileinfo.StringTable:
for entry in st.entries.items():
string_version_info[entry[0].decode()] = entry[1].decode()
pprint.pprint(string_version_info)
ฉันออกใบอนุญาตภายใต้ใบอนุญาต MIT ... ใครก็ตามที่รู้สึกว่าจำเป็นต้องสร้างสคริปต์ที่มีประโยชน์หรือสิ่งอื่น ๆ ด้วย ...
และดูGithub Gists - spookyahell / peinfo.pyสำหรับตัวอย่างการใช้วิธีนี้ในสคริปต์อื่น ...