首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

VBScript 利用 WindowsInstaller.Installer 物件計算文件 MD5 雜湊值

     編輯:關於C語言

需求場景

在無第三方工具、純系統內建環境(Windows Script Host)下快速獲取文件 MD5、大小、版本、屬性等資訊。

核心物件:WindowsInstaller.Installer

Windows Installer 服務提供的 COM 物件,暴露 FileHash 方法可計算文件雜湊(支援 MD5、SHA1 等)。

完整 VBScript 代碼

Option Explicit

Dim wi, file, file_size, file_attributes, file_version, file_hash

Set wi = CreateObject("WindowsInstaller.Installer")
file = "C:\WINDOWS\explorer.exe"

file_size = wi.FileSize(file)
file_attributes = wi.FileAttributes(file)
file_version = wi.FileVersion(file)
file_hash = GetFileHash(file)

Set wi = Nothing

MsgBox "File: " & file & vbCrLf & _
       "Size: " & file_size & vbCrLf & _
       "Attributes: " & file_attributes & vbCrLf & _
       "Version: " & file_version & vbCrLf & _
       "MD5: " & file_hash

Function GetFileHash(file_name)
    Dim file_hash, hash_value, i
    ' 0 = MD5, 1 = SHA1, 2 = SHA256, 3 = SHA384, 4 = SHA512
    Set file_hash = wi.FileHash(file_name, 0)
    hash_value = ""
    For i = 1 To file_hash.FieldCount
        ' IntegerData 返回小端序 32 位整數,需轉大端序十六進位
        hash_value = hash_value & BigEndianHex(file_hash.IntegerData(i))
    Next
    GetFileHash = hash_value
    Set file_hash = Nothing
End Function

Function BigEndianHex(int_val)
    Dim result, b1, b2, b3, b4
    result = Hex(int_val) ' 返回不足 8 位前導零會缺失
    ' 補零至 8 字符
    result = Right("00000000" & result, 8)
    b1 = Mid(result, 7, 2)
    b2 = Mid(result, 5, 2)
    b3 = Mid(result, 3, 2)
    b4 = Mid(result, 1, 2)
    BigEndianHex = b1 & b2 & b3 & b4
End Function

關鍵細節解析

  • FileHash(path, type):type=0 為 MD5,返回 Record 物件。
  • Record.FieldCount:MD5 為 4 個 32 位字段(共 128 位)。
  • Record.IntegerData(i):返回**小端序**整數(低位在前),需逐字節反轉為標準大端序十六進位顯示。
  • BigEndianHex:補零 + 字節序交換 (12345678 → 78563412)。

優缺點評價

現代替代方案

  • PowerShell:Get-FileHash -Algorithm MD5 file.exe(原生、跨平台 Core 6+)。
  • certutil:certutil -hashfile file.exe MD5(系統內建、命令列)。
  • Python:hashlib.md5(open(f,'rb').read()).hexdigest()(腳本首選)。

總結

WindowsInstaller.Installer 是舊版 Windows 系統管理腳本獲取文件雜湊的經典技巧。理解其 COM 介面、字節序處理,有助於維護遺留自動化腳本。新專案請優先使用 PowerShell 或跨平台語言實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
優點缺點
零依賴,系統內建需 Windows Installer 服務啟動
同時獲取大小/版本/屬性VBScript 效能較低,大量文件不適用
代碼極簡單僅限 Windows 平台