400分,求大家来帮我看看,为什么我的这段EXE文件的CompanyName的代码无效?(300)

  • 主题发起人 主题发起人 qutwah
  • 开始时间 开始时间
Q

qutwah

Unregistered / Unconfirmed
GUEST, unregistred user!
function SetFileVer(const DestFileName:string;Info:TFileInfo):Boolean;const SFInfo='/StringFileInfo/';var mSize: Integer; mLen: UINT; mTranslate, mFixV: Pointer; mHExe, mRes: THandle; mVersion: array of Byte; //mFixVersion: VS_FIXEDFILEINFO; mFixVersion1: PVSFixedFileInfo; mLang: PLANGANDCODEPAGE; VersionValue: string;begin mSize := GetFileVersionInfoSize(Pchar(DestFileName), mRes); if mSize>0 then begin SetLength(mVersion, mSize); GetFileVersionInfo(Pchar(DestFileName), mRes, mSize, mVersion);
 
try mHExe := BeginUpdateResource(Pchar(DestFileName), False); VerQueryValue(mVersion,'/VarFileInfo/Translation',mFixV, mLen); VersionValue :=SFInfo+IntToHex(LoWord(Longint(mFixV^)),4)+IntToHex(HiWord(Longint(mFixV^)),4)+'/'; //修改CompanyName if VerQueryValue(mVersion, pchar(VersionValue+'CompanyName'), mFixV, mLen) then begin mFixV :=Pchar('My company'); //StrCopy(mFixV,Pchar('My company')); mLang := PLANGANDCODEPAGE(mTranslate); if UpdateResource(mHExe, RT_VERSION, MAKEINTRESOURCE(VS_VERSION_INFO), mLang^.wLanguage, mVersion, mSize) then EndUpdateResource(mHExe, False); end; finally FreeLibrary(mHExe); end; end;end;
 
跟踪看看,函数执行不成功的地方,用函数ShowMessage( SysErrorMessage( GetLastError ) );来获得失败原因
 
to znxia,我按你的方法,结果提示"操作成功完成"可我想改CompanyName没改成功啊?为什么?
 
to znxia: 你这个ShowMessage( SysErrorMessage( GetLastError ) );是放在try...except ShowMessage( SysErrorMessage( GetLastError ) ); end;我试了下,这样好像捕获不了失败原因
 
在每一个条件语句的地方设置一条 ShowMessage();看看是不是有语句没有执行?
 
de410 我想,并不是某条语句未执行成功!而是这个方法本身就有问题,还请各位高手们帮忙!
 
后退
顶部