Які цікаві способи командного рядка перевірити деталі DLL / EXE?


13

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

Деталі shell32.dll з Windows 7 amd64

Цікаво: чи існує також спосіб командного рядка зробити це? Мене особливо цікавить версія продукту, але також можуть бути корисні й інші речі.

Наступні властивості бажані в порядку черговості:

  • прийняти exe / dll шлях як параметр
  • вихід на стандартний вихід (щоб ви могли обробити решта за допомогою |труби)
  • доступно за замовчуванням у всіх підтримуваних Windows (XP +)
  • доступно за замовчуванням у Windows Vista +
  • доступно за замовчуванням у Windows XP
  • може бути використаний у комерційному середовищі
  • безкоштовна ліцензія (схожа на GPL)
  • портативний (тобто автономний EXE, можливо, супроводжується DLL)

Про це вже запитували у програмі Переповнення стека: Інструмент командного рядка для скидання версії DLL Windows?
Алоїз Магдал

Відповіді:


9

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


Я не можу змусити ваш код працювати ...
soandos

Я отримав так далеко get-command "$args[0]" | format-list, що я зберег як aaa.ps1і названий як, powershell -File aaa.ps1 shell32.dllале це нічого не друкує.
Алоїз Магдал

@soandos: схоже, повноваження v2 потрібна для get-command для роботи з довільними виконуваними файлами.
kreemoweet

У мене повноваження v2
soandos

приємно, я цього не знав, він навіть повертає трохи більше інформації, ніж вікно властивості. Цікава інформація інкапсульована у FileInfoVersionвластивості ApplicationInfoоб’єкта.
mjsr

5

Використовуйте утиліту DUMPBIN від Microsoft .

У ньому є багато корисних варіантів, однак, це залежить від того, що ви хочете зробити.

Однак це не безкоштовно, але я вважаю, що його можна безкоштовно отримати за допомогою Windows SDK.


3
Чому це не безкоштовно, якщо його можна безкоштовно отримати за допомогою 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)

    Відображає інформацію про бінарні файли загального об'єктного файлу (COFF). Ви можете використовувати DUMPBIN для вивчення об’єктних файлів COFF, стандартних бібліотек об’єктів COFF, виконуваних файлів та бібліотек динамічного зв'язку (DLL).

  • binwalk- пошук у визначених файлах (файлах) для виконуваних опкодів, загальних для різних архітектур процесора. Простий у використанні інструмент для аналізу, зворотної інженерії та вилучення цікавих файлів / даних з бінарних файлів.


Щоб отримати додаткові команди, перевірте:


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.


Там є пара відповідей, я не впевнений, який саме з них ви маєте на увазі. Однак я спробував деякі з них, вони, схоже, мають шлях до жорсткого коду notepad.exe. Чи є простий спосіб їх завершити, щоб вони прийняли шлях до dll / exe як параметр? Переважно виводити на стандартний вихід?
Алоїз Магдал

Він приймає шлях як параметр, а версія продукту міститься вGetProductVersion
soandos
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.