Bei den meisten ausführbaren Windows-Dateien (DLL, EXE usw.) können die Version und andere Details mithilfe der Registerkarte „Details“ unter „Eigenschaften“ ( Alt+ Enter) angezeigt werden.
Ich frage mich: Gibt es dafür auch eine Befehlszeilenmethode? Ich bin insbesondere an der Produktversion interessiert, aber auch andere Dinge könnten nützlich sein.
Folgende Eigenschaften sind in der Reihenfolge ihrer Priorität erwünscht:
- exe/dll-Pfad als Parameter akzeptieren
- Ausgabe auf Standardausgabe (damit Sie den Rest über
|
die Pipe verarbeiten können) - standardmäßig verfügbar in allen unterstützten Windows (XP+)
- standardmäßig verfügbar in Windows Vista+
- standardmäßig verfügbar in Windows XP
- im kommerziellen Umfeld einsetzbar
- freie Lizenz (GPL-ähnlich)
- portabel (d. h. eigenständige EXE, möglicherweise mit DLL)
Antwort1
In Powershell get-command "full-path-to-executable" | format-list
würde es funktionieren. Powershell ist die neue Befehlszeile für Vista und spätere Windows-Versionen und kann in XP installiert werden.
Antwort2
Sie könnensigcheck.exe
tragbares Werkzeug, das Teil vonSysinternals-Suite, z.B
$ sigcheck.exe some_app.exe
Sigcheck v2.51 - File version and signature viewer
Copyright (C) 2004-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
C:/Program Files (x86)/Foo App\some_app.exe:
Verified: Signed
Signing date: 14:48 23/12/2015
Publisher: X
Company: X
Description: X
Product: Some App
Prod version: 5.0.0.1241
File version: 5.0.0.1241
MachineType: 32-bit
Für ältere Windows-Versionen wie XP/2k/2003 (funktioniert auch unter neueren) verwenden Siefilever.exe
Werkzeug (überprüfen Sie diedirekte Verbindungbeiexedll.info), um spezifische Informationen zu einer Datei zu erhalten, beispielsweise:
- Die Plattform, auf der die Datei ausgeführt wird
- Die Version der Datei
- Die Attribute der Datei
- Der Dateityp
- Die Sprache der Datei
- Ob es sich bei der Datei um einen Versandtyp oder einen Debugtyp handelt
- Die Dateigröße
- Das Datum, an dem die Datei erstellt wurde
- Der Pfad der Datei
Weitere zu berücksichtigende Punkte:
Der Microsoft COFF Binary File Dumper(DUMPBIN.EXE)
Zeigt Informationen zu Binärdateien im Common Object File Format (COFF) an. Mit DUMPBIN können Sie COFF-Objektdateien, Standardbibliotheken von COFF-Objekten, ausführbare Dateien und Dynamic Link Libraries (DLLs) untersuchen.
binwalk
- Durchsucht die angegebenen Dateien nach ausführbaren Opcodes, die bei verschiedenen CPU-Architekturen üblich sind. Einfach zu verwendendes Tool zum Analysieren, Reverse Engineering und Extrahieren interessanter Dateien/Daten aus Binärdateien.
Weitere Befehle finden Sie unter:
Antwort3
Verwenden Sie dieDUMPBIN-Dienstprogramm.
Es bietet zahlreiche nützliche Optionen, es hängt jedoch davon ab, was Sie tun möchten.
Es ist jedoch nicht kostenlos, kann aber meines Wissens kostenlos mit dem Windows SDK bezogen werden.
Antwort4
Als ich mich zum ersten Mal mit diesem Problembereich befasste, stellte ich fest, dass die Verwendung einfacher Befehle wie (Get-Item -Path "C:\path\to\file.exe").VersionInfo.ProductVersion
– wie in den Antworten vondiese SO-Frage— funktionierte nicht zuverlässig über alle ausführbaren Dateien hinweg (leerer Rückgabewert). Mir ist auch aufgefallen, dass ExplorertutDie Werte im Eigenschaftenblatt einer bestimmten ausführbaren Datei werden nicht zuverlässig angezeigt. Deshalb habe ich beschlossen, eine Powershell-Funktion zu erstellen, die nachahmt, was der Explorer (vermutlich) tut, um die Eigenschaften abzurufen.
Hier ist eine Powershell-Funktion zum Abrufen aller erweiterten Eigenschaften, einschließlich der Produktversion.
function Get-AllExtendedProperties {
param (
[string]$FilePath
)
If (-not $FilePath) {
Throw "Error: missing `$FilePath parameter"
}
$file = Get-Item $FilePath
If ($file -and $file.Exists) {
$parentFolder = Split-Path $file.FullName -Parent
$shell = New-Object -ComObject Shell.Application
$folder = $shell.Namespace($parentFolder)
$fileItem = $folder.ParseName($file.Name)
# Get all extended properties
$extendedProperties = @{}
For ($i = 0; $i -lt 300; $i++) {
$propertyValue = $folder.GetDetailsOf($fileItem, $i)
if ($propertyValue) {
$propertyName = $folder.GetDetailsOf($folder.Items, $i)
$extendedProperties[$propertyName] = $propertyValue
}
}
# Sort the hashtable by property name
$sortedExtendedProperties = $extendedProperties.GetEnumerator() | Sort-Object Name | ForEach-Object { $_.Key = $_.Key.Trim(); $_ }
Write-Output $sortedExtendedProperties
} Else {
Throw "Error: missing file"
}
}
Verwendung
Der einfachste Weg, diese Funktion zu verwenden, besteht darin, sie in ein Powershell-Fenster zu kopieren/einzufügen und zu drücken Return ↵. Anschließend können Sie sie folgendermaßen verwenden:
Get-AllExtendedProperties -FilePath "C:\path\to\file.exe"
Wenn Sie den Wert einer bestimmten Eigenschaft abrufen möchten, beispielsweise die Produktversion, verwenden Sie ihn folgendermaßen:
Get-AllExtendedProperties -FilePath "C:\path\to\file.exe" | Where-Object {$_.Name -eq 'Product Version'} | Select-Object -ExpandProperty Value