windows - 设置 EXE 版本信息

标签 windows delphi exe patch versioninfo

我通过 VerQueryValue 收到的关于版本 Exe 文件的信息.是否有可以注册(建立或更改)此类信息的反函数(WinApi或Delphi)? 例如,这里有一个程序可以做到这一点。它是如何工作的 (http://www.angusj.com/resourcehacker)?

最佳答案

版本信息通过资源存储;要编辑您只需要编辑该资源。这是我发现的可以克隆现有文件版本信息并将其附加到另一个文件的单元。从这段代码开始很容易做你想做的事(它是由我的一个 friend 编写的,并且是公开的):

unit cloneinfo;

interface

uses Windows, SysUtils;

type
 LANGANDCODEPAGE = record
  wLanguage: Word;
  wCodePage: Word;
 end;

procedure clone(sFile,output:string);

implementation

procedure clone(sFile,output:string);
var
  dwHandle, cbTranslate: cardinal;
  sizeVers: DWord;
  lpData, langData: Pointer;
  lpTranslate: ^LANGANDCODEPAGE;
  hRes : THandle;
begin
 sizeVers := GetFileVersionInfoSize(PChar(sFile), dwHandle);
 If sizeVers = 0 then
 exit;
 GetMem(lpData, sizeVers);
 try
  ZeroMemory(lpData, sizeVers);
  GetFileVersionInfo (PChar(sFile), 0, sizeVers, lpData);
  If not VerQueryValue (lpData, '\VarFileInfo\Translation', langData, cbTranslate) then
  exit;
  hRes := BeginUpdateResource(pchar(output), FALSE);
  //For i := 0 to (cbTranslate div sizeof(LANGANDCODEPAGE)) do
  //begin
  lpTranslate := Pointer(Integer(langData) + sizeof(LANGANDCODEPAGE));
  UpdateResource(hRes, RT_VERSION, MAKEINTRESOURCE(VS_VERSION_INFO), lpTranslate^.wLanguage,lpData, sizeVers);
  //end;
  EndUpdateResource(hRes, FALSE);
 finally
  FreeMem(lpData);
 end;
end;


end.

关于windows - 设置 EXE 版本信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796246/

相关文章:

php - 使用mysql数据库在php中创建.exe文件

c++ - C++如何判断一个驱动是软盘还是可移动闪存盘?

python - CX_Freeze 可执行文件给出 "unable to load file system codec"错误

delphi - 为什么我的 TStringList 没有排序?

delphi - XML文档注释中的交叉引用

python-3.x - 命令行或 .exe 中的 Python 程序给出 MemoryError,但在 Spyder IDE 中工作正常

java - 如何在其他计算机上运行java可执行文件

javascript - 如何获取客户端计算机的 MAC 地址或机器标识符

c++ - 如何扩展 CAxHostWindow?

c++ - 在 Delphi 应用程序中调用 C++ DLL