Một số cách dòng lệnh tốt để kiểm tra chi tiết DLL / EXE là gì?


13

Với hầu hết các tệp thực thi Windows (DLL, EXE ...), phiên bản và các chi tiết khác có thể được xem bằng cách sử dụng tab "Chi tiết" trong "Thuộc tính" ( Alt+ Enter).

Chi tiết về shell32.dll từ Windows 7 amd64

Tôi tự hỏi: đó cũng là một cách dòng lệnh để làm điều này? Tôi đặc biệt quan tâm đến phiên bản Sản phẩm, nhưng những thứ khác cũng có thể hữu ích.

Các thuộc tính sau được mong muốn, theo thứ tự ưu tiên:

  • chấp nhận đường dẫn exe / dll làm tham số
  • đầu ra thành đầu ra tiêu chuẩn (để bạn có thể xử lý phần còn lại qua |đường ống)
  • có sẵn theo mặc định trong tất cả các Windows được hỗ trợ (XP +)
  • có sẵn theo mặc định trong Windows Vista +
  • có sẵn theo mặc định trong Windows XP
  • có thể sử dụng trong môi trường thương mại
  • giấy phép miễn phí (giống GPL)
  • xách tay (ví dụ: exe độc ​​lập, có thể đi kèm với DLL)

Điều này đã được yêu cầu trên Stack Overflow: Công cụ dòng lệnh để kết xuất phiên bản Windows DLL?
Alois Mahdal

Câu trả lời:


9

Trong powershell, get-command "full-path-to-executable" | format-listsẽ làm các thủ thuật. Powershell là dòng lệnh mới cho Vista và Windows mới hơn, có thể được cài đặt trong XP.


Tôi không thể lấy mã của bạn để làm việc ...
soandos

Tôi đã đi xa đến mức get-command "$args[0]" | format-listmà tôi đã lưu aaa.ps1và gọi là powershell -File aaa.ps1 shell32.dllnhưng nó không in bất cứ thứ gì.
Alois Mahdal

@soandos: có vẻ như powershell v2 được yêu cầu để lệnh get hoạt động với các tệp thực thi tùy ý.
kreemoweet

Tôi có powershell v2
soandos

thật tuyệt, tôi không biết rằng, nó thậm chí còn trả lại một ít thông tin hơn cửa sổ tài sản. Các thông tin thú vị được gói gọn trong thuộc FileInfoVersiontính của ApplicationInfođối tượng.
mjsr

5

Sử dụng tiện ích DUMPBIN của Microsoft .

Nó có rất nhiều tùy chọn hữu ích, tuy nhiên, nó phụ thuộc vào những gì bạn muốn làm.

Tuy nhiên, nó không miễn phí, nhưng tôi tin rằng có thể lấy miễn phí với Windows SDK.


3
Tại sao nó không miễn phí nếu có thể lấy miễn phí với SDK?
CJ7

4

Bạn có thể sử dụng sigcheck.execông cụ di động là một phần của Sysiternals Suite , vd

$ 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

Đối với phiên bản Windows cũ hơn như XP / 2k / 2003 (nó vẫn hoạt động mới), hãy sử dụng filever.execông cụ (kiểm tra liên kết trực tiếp tại exedll.info ) để có được thông tin cụ thể về một tệp như:

  • Nền tảng mà tập tin chạy
  • Phiên bản của tập tin
  • Các thuộc tính của tập tin
  • Loại tệp
  • Ngôn ngữ của tập tin
  • Cho dù tệp là loại vận chuyển hay loại gỡ lỗi
  • Kích thước tập tin
  • Ngày mà tệp được tạo
  • Đường dẫn của tệp

Một số khác để xem xét:

  • Trình mở tệp nhị phân Microsoft COFF (DUMPBIN.EXE)

    Hiển thị thông tin về tệp nhị phân Định dạng tệp đối tượng chung (COFF). Bạn có thể sử dụng DUMPBIN để kiểm tra các tệp đối tượng COFF, thư viện chuẩn của các đối tượng COFF, các tệp thực thi và các thư viện liên kết động (DLL).

  • binwalk- tìm kiếm (các) tệp được chỉ định để tìm các mã thực thi chung cho nhiều kiến ​​trúc CPU. Công cụ dễ sử dụng để phân tích, kỹ thuật đảo ngược và trích xuất các tệp / dữ liệu thú vị từ các tệp nhị phân.


Để biết thêm các lệnh, kiểm tra:


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  

Nguồn là một liên kết đến tệp .vbs có thể lấy phiên bản tệp cho bạn và bạn có thể lấy đó và sử dụng đầu ra theo cách bạn muốn.

Tàu sẽ tất cả các phiên bản của windows, không chắc chắn về giấy phép, rất di động, nhưng không exe hoặc DLL.


Có một vài câu trả lời ở đó, tôi không chắc bạn muốn nói câu nào. Tuy nhiên, tôi đã thử một vài trong số chúng, dường như chúng có đường dẫn đến notepad.exe được mã hóa cứng. Có cách nào dễ dàng để bọc chúng để chúng chấp nhận đường dẫn đến dll / exe làm tham số không? Tốt nhất là đầu ra cho đầu ra tiêu chuẩn?
Alois Mahdal

Nó lấy một đường dẫn làm tham số và phiên bản sản phẩm được chứa trongGetProductVersion
soandos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.