可编写脚本的PE资源编辑器

时间:2013-01-17 12:10:50

标签: windows portable-executable resource-editor

我需要一个命令行工具,它支持从PE可执行文件的资源中检索版本信息,并使用新版本修补二进制文件。我需要做的是自动增加PE二进制版本。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

带有COM接口的资源工具库[12]。您可以从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函数的包装器,为您提供自动化界面,不仅可以修补数字,还可以修补其他版本信息组件,字符串,位图。