【问题标题】:Scriptable PE resource editor可编写脚本的 PE 资源编辑器
【发布时间】:2012-12-31 23:24:38
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: windows portable-executable resource-editor


    【解决方案1】:

    具有 COM 接口的资源工具库 [1, 2]。您可以从 VBScript/JScript 中使用它,并像我一样自动修补版本信息。

    导入/浏览 DLL 类型库以查看 COM 接口语法,以下是用于 VersionInfo 修补自动化的代码 sn-p。

    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 函数和朋友的包装器,为您提供自动化接口,不仅可以修补数字,还可以修补其他版本信息组件、字符串、位图。

    【讨论】:

    • 这看起来确实是我需要的。但是,我无法正确安装 ResourceTools(尝试了 Win8 和 Win7、64 位),而测试文件只能用于 new ActiveXObject("AlaxInfo.ResourceTools.Image")。我收到错误消息“自动化服务器无法创建对象”。如果我 regsvr32 .dll,那么我得到:“注册表值无效”。知道如何让它工作吗? (对不起,我对 COM 有点一窍不通……)
    • 您需要1 从管理命令提示符安装 Win32 和/或 x64 版本,运行 .js 脚本时提升权限 2 确保运行适当位数的 cscript.exe,例如对于 64 位 Windows 上的 Win32,您将运行 C:\Windows\syswow64\cscript.exe myscript.js
    • 所以它在 Windows 7/8、64 位上对我不起作用。以管理员权限安装,使用正确的 cscript 运行等,同样的错误。但是,它似乎可以在干净的 Windows XP 32 位安装上运行(我仍然必须 regsvr32 .dll),所以我猜它是可以接受的。谢谢!
    • 不确定 Win 8,但它肯定在 Win 7 中工作,都是 32/64 位。
    猜你喜欢
    • 2022-12-11
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2011-10-13
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多