修改文件版本号, 其实就是修改文件的资源. MSDN上没有明说如何修改文件的版本号的方法, 因为MS认为版本号应该是属于文件创建者的, 而不是如我们这样的文件所有者应该去修改的. 但资源总是资源, MS提供了如何修改资源的函数, 当然这些函数也可以修改版本号.
首先, 我们要找到文件的版本信息资源:
mSize :
=
GetFileVersionInfoSize(
'
FileName.exe
'
);
SetLength(mVersion, mSize);
GetFileVersionInfo(
'
FileName.exe
'
, mRes, mSize, mVersion);
这个代码能让我们得到文件的版本信息资源, 得到的结果就放在mVersion中, 其实这个就是一串的二进制形的资源内存块.
第二步, 我们要找到文件的版本信息:
VerQueryValue(mVersion,
'
', mFixV, mLen);
mFixVersion1 :
=
PVSFixedFileInfo(mFixV);
这一步能让我们得到mFixVersionInfo, 它是mVersion这个资源内存块中指向文件的版本信息的那一部分的指针.
第三步, 修改文件的版本信息:
mFixVersion
^
.dwFileVersionMS :
=
$
10001
;
//
高位低位都为1
mFixVersion
^
.dwFileVersionLS :
=
26
shl
16
+
26
;
//
高位低位都为26
这两步演示了如何修改文件的版本号, dwFileVersionMS的高位是Major Version, 低位是Minor Version, dwFileVersionLS的高位是Release Version, 低位是Build Version.
第四步, 保存修改的内容, 下面就可以参考MSDN上的UpdateResource部分的例子了, 因为都是资源嘛:
mHExe :
=
BeginUpdateResource(
'
FileName.Exe
'
, False);
if
VerQueryValue(mVersion,
'
VarFileInfoTranslation
'
, mTranslate, mLen) then begin
//
这步是因为基本都是单区域资源的, 如果是多区域的, 可以参考MSDN中的作法,
//
将mTranslate/sizeof(LANGANDCODEPAGE)来得到第一个
mLang :
=
PLANGANDCODEPAGE(mTranslate);
if
UpdateResource(mHExe, RT_VERSION, MakeIntResource(
1
), mLang
^
.wLanguage, mVersion, mSize) then
EndUpdateResource(mHExe, False);
FreeLibrary(mHExe);
这样, 我们就修改了文件的版本号了, 可以类推出如何修改版本资源中的其它资源.
完整的代码如下
type
PLANGANDCODEPAGE
=
^
LANGANDCODEPAGE;
LANGANDCODEPAGE
=
record
wLanguage: Word;
wCodePage: Word;
end;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
var
mSize: Integer;
mLen, mLen1: UINT;
mTranslate, mFixV: Pointer;
mHExe, mRes: THandle;
mVersion: array of Byte;
mFixVersion: VS_FIXEDFILEINFO;
mFixVersion1: PVSFixedFileInfo;
mLang: PLANGANDCODEPAGE;
begin
mSize :
=
GetFileVersionInfoSize(
'
FileName.exe
'
, mRes);
SetLength(mVersion, mSize);
GetFileVersionInfo(
'
FileName.exe
'
, mRes, mSize, mVersion);
VerQueryValue(mVersion,
'
', mFixV, mLen);
mFixVersion1 :
=
PVSFixedFileInfo(mFixV);
mFixVersion1
^
.dwFileVersionMS :
=
$
10001
;
mFixVersion1
^
.dwFileVersionLS :
=
26
shl
16
+
26
;
mHExe :
=
BeginUpdateResource(
'
FileName.exe
'
, False);
if
VerQueryValue(mVersion,
'
VarFileInfoTranslation
'
, mTranslate, mLen) then begin
mLang :
=
PLANGANDCODEPAGE(mTranslate);
if
UpdateResource(mHExe, RT_VERSION, MakeIntResource(
1
), mLang
^
.wLanguage, mVersion, mSize) then
EndUpdateResource(mHExe, False);
end
FreeLibrary(mHExe);
首先, 我们要找到文件的版本信息资源:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
这个代码能让我们得到文件的版本信息资源, 得到的结果就放在mVersion中, 其实这个就是一串的二进制形的资源内存块.
第二步, 我们要找到文件的版本信息:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
这一步能让我们得到mFixVersionInfo, 它是mVersion这个资源内存块中指向文件的版本信息的那一部分的指针.
第三步, 修改文件的版本信息:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
这两步演示了如何修改文件的版本号, dwFileVersionMS的高位是Major Version, 低位是Minor Version, dwFileVersionLS的高位是Release Version, 低位是Build Version.
第四步, 保存修改的内容, 下面就可以参考MSDN上的UpdateResource部分的例子了, 因为都是资源嘛:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
这样, 我们就修改了文件的版本号了, 可以类推出如何修改版本资源中的其它资源.
完整的代码如下
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)