Какие есть хорошие способы командной строки для проверки деталей DLL / EXE?

9

Для большинства исполняемых файлов Windows (DLL, EXE ...) версию и другие сведения можно просмотреть на вкладке «Сведения» в «Свойствах» ( Alt+ Enter).

Подробная информация о shell32.dll из Windows 7 amd64

Интересно: есть ли способ командной строки сделать это? Меня особенно интересует версия продукта, но также могут быть полезны и другие вещи.

Следующие свойства желательны в порядке приоритета:

  • принять путь exe / dll в качестве параметра
  • вывод на стандартный вывод (так что вы можете обработать остаток через |канал)
  • доступно по умолчанию во всех поддерживаемых Windows (XP +)
  • доступно по умолчанию в Windows Vista +
  • доступно по умолчанию в Windows XP
  • применимый в коммерческой среде
  • бесплатная лицензия (как GPL)
  • переносимый (т.е. автономный exe, может сопровождаться DLL)
Алоис Махдал
источник
Об этом уже спрашивали в переполнении стека: инструмент командной строки для вывода версии Windows DLL?
Алоис Махдал

Ответы:

7

В powershell, get-command "full-path-to-executable" | format-listсделали бы свое дело. Powershell - это новая командная строка для Vista и более поздних версий Windows, которая может быть установлена ​​в XP.

kreemoweet
источник
Я не могу заставить твой код работать ...
soandos
Я дошел до того get-command "$args[0]" | format-list, что я сохранил aaa.ps1и назвал как, powershell -File aaa.ps1 shell32.dllно это ничего не печатает.
Алоис Махдал
@soandos: кажется, что powershell v2 необходим для работы get-command с произвольными исполняемыми файлами.
kreemoweet
У меня есть powershell v2
soandos
хорошо, я не знал этого, он даже возвращает немного больше информации, чем окно свойств. Интересная информация заключена в FileInfoVersionсобственность ApplicationInfoобъекта.
mjsr
4

Используйте утилиту Microsoft DUMPBIN .

У него много полезных опций, однако это зависит от того, что вы хотите сделать.

Тем не менее, это не бесплатно, но я считаю, что можно получить бесплатно с Windows SDK.

wizzard0
источник
2
Почему он не бесплатен, если его можно бесплатно получить с помощью SDK?
CJ7
4

Вы можете использовать sigcheck.exeпортативный инструмент, который входит в состав Sysinternals Suite , например,

$ 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

Для более старой версии Windows, такой как XP / 2k / 2003 (она все еще работает в новой), используйте filever.exeинструмент (проверьте прямую ссылку на exedll.info ), чтобы получить конкретную информацию о файле, такую ​​как:

  • Платформа, на которой работает файл
  • Версия файла
  • Атрибуты файла
  • Тип файла
  • Язык файла
  • Является ли файл типом доставки или типом отладки
  • Размер файла
  • Дата создания файла
  • Путь к файлу

Некоторые другие, чтобы рассмотреть:

  • Дампер двоичных файлов Microsoft COFF (DUMPBIN.EXE)

    Отображает информацию о двоичных файлах Common Object File Format (COFF). Вы можете использовать DUMPBIN для проверки объектных файлов COFF, стандартных библиотек объектов COFF, исполняемых файлов и библиотек динамической компоновки (DLL).

  • binwalk- искать в указанных файлах исполняемые коды операций, общие для различных архитектур ЦП. Простой в использовании инструмент для анализа, обратного проектирования и извлечения интересных файлов / данных из двоичных файлов.


Для получения дополнительных команд, проверьте:

kenorb
источник
3
Function GetProductVersion (sFilePath, sProgram)  
Dim objShell, objFolder, objFolderItem, i  
If FSO.FileExists(sFilePath & "\" & sProgram) Then  
    Set objShell = CreateObject("Shell.Application")  
    Set objFolder = objShell.Namespace(sFilePath)  
    Set objFolderItem = objFolder.ParseName(sProgram)  
    Dim arrHeaders(300)  
    For i = 0 To 300  
        arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)  
        'WScript.Echo i &"- " & arrHeaders(i) & ": " & objFolder.GetDetailsOf(objFolderItem, i)  
        If lcase(arrHeaders(i))= "product version" Then  
            GetProductVersion= objFolder.GetDetailsOf(objFolderItem, i)  
            Exit For  
        End If  
    Next  
End If  
End Function  

Источник - это ссылка на файл .vbs, который может получить версию файла для вас, и вы можете взять ее и использовать вывод по своему усмотрению.

Корабли будут все версии Windows, не уверен насчет лицензии, очень переносимый, но не exe или DLL.

soandos
источник
Там есть пара ответов, я не уверен, какой ты имеешь в виду. Тем не менее, я попробовал некоторые из них, они, кажется, имеют путь к notepad.exe жестко запрограммированы. Есть ли простой способ обернуть их, чтобы они приняли путь к DLL / EXE в качестве параметра? Желательно выводить на стандартный вывод?
Алоис Махдал
Он принимает путь в качестве параметра, и версия продукта содержится вGetProductVersion
soandos