2013-01-17 37 views
1

我需要一個命令行工具,它支持從PE可執行文件的資源中檢索版本信息,並使用新版本修補二進制文件。我需要做的是自動遞增PE二進制文件的版本。可編寫腳本的PE資源編輯器

任何想法?

回答

2

資源工具庫[1,2]與COM接口。您可以在VBScript/JScript中使用它,並像我已經做的那樣自動修補版本信息。

導入/瀏覽DLL類型庫以查看COM接口語法,下面是用於自動化VersionInfo修補的代碼片段。

WshShell = WScript.CreateObject("WScript.Shell"); 
WScript.Echo("Current Directory: " + WshShell.CurrentDirectory); 
Image = new ActiveXObject("AlaxInfo.ResourceTools.Image"); 
Image.Initialize(WshShell.CurrentDirectory + "\\Sample.dll"); 
WScript.Echo("Product Version: " + Image.VersionInfo.ProductVersionString); 
WScript.Echo("File Version: " + Image.VersionInfo.FileVersionString); 

VersionString = Image.VersionInfo.FileVersionString; 
VersionString = VersionString.replace(" ", ""); 
VersionString = VersionString.replace(",", "."); 
if(/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/i.exec(VersionString) == null) 
    throw "Incorrect version string"; 
V1 = new Number(RegExp.$1); 
V2 = new Number(RegExp.$2); 
V3 = new Number(RegExp.$3); 
V4 = new Number(RegExp.$4); 
WScript.Echo("File Version Components: " + V1 + ", " + V2 + ", " + V3 + ", " + V4); 
V4++; 
VersionString = V1 + "." + V2 + "." + V3 + "." + V4; 
WScript.Echo("New File Version: " + VersionString); 

Image.VersionInfo.SetFileVersion(V1 * 65536 + V2, V3 * 65536 + V4); 
Image.VersionInfo.SetString(0, "FileVersion", VersionString); 
Image.VersionInfo.Update(); 
Image.EndUpdate(false); 

圖書館基本上結束了BeginUpdateResource功能的包裝和朋友爲您提供自動化接口爲修補不僅數字,但其他版本的信息成分,字符串,位圖。

+0

這看起來確實是我需要的。但是,我無法使ResourceTools正確安裝(同時嘗試Win8和Win7,64位),並且只有一個測試文件,它只執行'New ActiveXObject(「AlaxInfo.ResourceTools.Image」)'。我收到一個錯誤,「自動化服務器無法創建對象」。如果我regsvr32該.dll,然後我得到:「無效的註冊表值」。任何想法如何得到這個工作? (對不起,當我談到COM時,我有點不知所措......) – Unknown

+0

在運行'.js'腳本時,需要'1'從管理命令提示符處安裝Win32和/或x64版本,提升特權'2'確保運行適當位的'cscript.exe',例如對於64位Windows上的Win32,您將運行'C:\ Windows \ syswow64 \ cscript.exe myscript.js'。 –

+0

因此它在Windows 7/8,64位上對我無效。以管理員權限安裝,使用正確的cscript等運行,同樣的錯誤。然而,它似乎在一個乾淨的Windows XP 32位安裝(我仍然必須regsvr32 .dll),所以我想這是可以接受的。謝謝! – Unknown