文件运行后修改自身版本号 好久没有问人咯,问题压了一些。所以问问,获得版本的方法我找到咯。怎么程序修改呢?网上看了一些方法,UpdateResource api,然后去msdn看了下这个函数的用法.maybe 自己天生愚钝,所以不是很懂,在这里问问高手们,请指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要改别的程序版本号是没有问题的:procedure TForm1.Button2Click(Sender: TObject);type PLANGANDCODEPAGE = ^LANGANDCODEPAGE; LANGANDCODEPAGE = record wLanguage: Word; wCodePage: Word; end;var mSize: Integer; mLen, mLen1: UINT; mTranslate, mFixV: Pointer; mHExe, mRes: THandle; mVersion: array of Byte; mFixVersion: VS_FIXEDFILEINFO; mFixVersion1: PVSFixedFileInfo; mLang: PLANGANDCODEPAGE; fm:pchar; nver:pchar;begin fm:=pchar('Project1.exe'); // fm:=pchar(ParamStr(0)); mSize := GetFileVersionInfoSize(fm, mRes); if mSize=0 then begin ShowMessage('GetFileVersionInfoSize 错:'+SysErrorMessage(GetLastError)); exit; end; SetLength(mVersion, mSize); GetFileVersionInfo(fm, mRes, mSize, mVersion); VerQueryValue(mVersion, '', mFixV, mLen); mFixVersion1 := PVSFixedFileInfo(mFixV); mFixVersion1^.dwFileVersionMS := 12 shl 16 + 34; mFixVersion1^.dwFileVersionLS := 56 shl 16 + 78; mHExe := BeginUpdateResource(fm, false); if mHExe=0 then begin ShowMessage('BeginUpdateResource 错:'+SysErrorMessage(GetLastError)); exit; end; if VerQueryValue(mVersion, 'VarFileInfo\Translation', mTranslate, mLen) then begin mLang := PLANGANDCODEPAGE(mTranslate); if UpdateResource(mHExe, RT_VERSION, MakeIntResource(1), mLang^.wLanguage, mVersion, mSize) then begin if not EndUpdateResource(mHExe, false) then ShowMessage('UpdateResource 错:'+SysErrorMessage(GetLastError)); end else ShowMessage('UpdateResource 错:'+SysErrorMessage(GetLastError)); end else ShowMessage('VerQueryValue 错:'+SysErrorMessage(GetLastError)); FreeLibrary(mHExe);end;但要改自身的版本号,就难了,因为在程序运行期间是不能修改的,只能通过另一个程序来改了 lstrcpy(FPShareStruct.ParaData[iTaskNo].outData,pchar('1|'+outData+'|'));转成C++ 特殊字符串显示问题!! 寻找进销存业务流程 ActiveX传入参数的问题? 一个较为棘手的难题,望高手们帮忙 CSDN和大富翁上第二次问这个问题,就没人能搞定? 如何统计一段程序的运行时间? Frank001(Frank) 来领分 怎样处理鼠标拖动事件。 请问关于开发数据库应用程序不要显示密码输入框的问题? 在记录类型中写函数 delphi程序升级问题
type
PLANGANDCODEPAGE = ^LANGANDCODEPAGE;
LANGANDCODEPAGE = record
wLanguage: Word;
wCodePage: Word;
end;
var
mSize: Integer;
mLen, mLen1: UINT;
mTranslate, mFixV: Pointer;
mHExe, mRes: THandle;
mVersion: array of Byte;
mFixVersion: VS_FIXEDFILEINFO;
mFixVersion1: PVSFixedFileInfo;
mLang: PLANGANDCODEPAGE;
fm:pchar;
nver:pchar;
begin
fm:=pchar('Project1.exe');
// fm:=pchar(ParamStr(0));
mSize := GetFileVersionInfoSize(fm, mRes);
if mSize=0 then
begin
ShowMessage('GetFileVersionInfoSize 错:'+SysErrorMessage(GetLastError));
exit;
end;
SetLength(mVersion, mSize);
GetFileVersionInfo(fm, mRes, mSize, mVersion);
VerQueryValue(mVersion, '', mFixV, mLen);
mFixVersion1 := PVSFixedFileInfo(mFixV);
mFixVersion1^.dwFileVersionMS := 12 shl 16 + 34;
mFixVersion1^.dwFileVersionLS := 56 shl 16 + 78;
mHExe := BeginUpdateResource(fm, false);
if mHExe=0 then
begin
ShowMessage('BeginUpdateResource 错:'+SysErrorMessage(GetLastError));
exit;
end;
if VerQueryValue(mVersion, 'VarFileInfo\Translation', mTranslate, mLen) then
begin
mLang := PLANGANDCODEPAGE(mTranslate);
if UpdateResource(mHExe, RT_VERSION, MakeIntResource(1), mLang^.wLanguage, mVersion, mSize) then
begin
if not EndUpdateResource(mHExe, false) then
ShowMessage('UpdateResource 错:'+SysErrorMessage(GetLastError));
end else
ShowMessage('UpdateResource 错:'+SysErrorMessage(GetLastError)); end else
ShowMessage('VerQueryValue 错:'+SysErrorMessage(GetLastError));
FreeLibrary(mHExe);
end;但要改自身的版本号,就难了,因为在程序运行期间是不能修改的,只能通过另一个程序来改了