怎样获得delphi编译之后的版本号,在线急 由于我现在想在进行软件版本升级时想使用户在使用时只能用新的版本(旧的版本不能使用),因此就要获得软件的版本号来区别,现在我的问题就是怎样来提取软件的版本号并使得用户只能有新的版本 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般在一个ini文件中记录着软件的版本,升级后就更改相应的值与之对应 http://www.yesky.com/SoftChannel/72342371928440832/20031111/1743541.shtmlconstInfoNum = 9;InfoStr: array[1..InfoNum] of string = ('ProductName','ProductVersion','FileDescription','LegalCopyright','FileVersion','CompanyName','LegalTradeMarks','InternalName','OriginalFileName');varS: string;BufSize, Len: DWORD;Buf: PChar;Value: PChar;beginS := Application.ExeName;BufSize := GetFileVersionInfoSize(PChar(S), BufSize);if BufSize > 0 then beginBuf := AllocMem(BufSize);GetFileVersionInfo(PChar(S), 0, BufSize, Buf);if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) thenProductName.Caption := Value;if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) thenProductVersion.Caption := '产品版本: ' + Value;if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) thenFileDescription.Caption := '文件说明: ' + Value;if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) thenLegalCopyright.Caption := '合法版权: ' + Value;if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) thenFileVersion.Caption := '文件版本: ' + Value;if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) thenCompanyName.Caption := '公司名称: ' + Value;if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) thenLegalTrades.Caption := '合法商标: ' + Value;if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) thenInternalName.Caption := '内部名称: ' + Value;if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) thenOriginalFilename.Caption := '原文件名: ' + Value;FreeMem(Buf, BufSize);// OperatingSystem.Caption := GetOSVerInfo;// SystemMemory.Caption := GetMemStat;endelse beginApplication.MessageBox('获取产品信息时遇到致命错误,请尝试重新启动软件。'+ #13 + '若仍未能解决问题,请联系产品服务人员。','错误',MB_OK + MB_ICONSTOP);Application.Terminate;end; 是可以的,跟api有关,可以取得你的程序的内部编译版本,我见过,但是不会。 為什麼不看看我的代碼???如果邊我的代碼都看不懂, 你又如何有能力做到>>现在我的问题就是怎样来提取软件的版本号并使得用户只能有新的版本這個更難!!! 我看了,你那个代码好象BufSize 总是为0,能不能说说什么原因 function GetBuildInfo: string;var VerInfoSize: DWORD; VerInfo: Pointer; VerValueSize: DWORD; VerValue: PVSFixedFileInfo; Dummy: DWORD; V1, V2, V3, V4: Word;begin VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy); if VerInfoSize = 0 then begin Dummy := GetLastError; Result := '0.0.0.0'; end; {if} GetMem(VerInfo, VerInfoSize); GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo); VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); with VerValue^ do begin V1 := dwFileVersionMS shr 16; V2 := dwFileVersionMS and $FFFF; V3 := dwFileVersionLS shr 16; V4 := dwFileVersionLS and $FFFF; end; Result := IntToStr(V1) + '.' + IntToStr(V2) + '.' + IntToStr(V3) + '.' + IntToStr(V4); FreeMem(VerInfo, VerInfoSize);end; 两个简单问题 如何动态绘制和改变应用程序的图标? 如何将16进制形式的字符串转换成BYTE数组???? 高分跪求, 如何获取SATA硬盘序列号 生日,再散200分(2) ^_^ 有关fastreport的checkbox用法 在线等待 急 数据批量保存! Delphi操作Excel的问题,望大牛们指教! 马上给分:哪里有DELPHI的函数说明可以下载啊,有没有象VB中的MID函数一样的 为什么啊! 菜鸟问题:如何通过自己设置的特殊字符来拆分字符串 快来看啊!奇文!《你该相信谁》
InfoNum = 9;
InfoStr: array[1..InfoNum] of string = (
'ProductName',
'ProductVersion',
'FileDescription',
'LegalCopyright',
'FileVersion',
'CompanyName',
'LegalTradeMarks',
'InternalName',
'OriginalFileName'
);
var
S: string;
BufSize, Len: DWORD;
Buf: PChar;
Value: PChar;
begin
S := Application.ExeName;
BufSize := GetFileVersionInfoSize(PChar(S), BufSize);
if BufSize > 0 then beginBuf := AllocMem(BufSize);
GetFileVersionInfo(PChar(S), 0, BufSize, Buf);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) then
ProductName.Caption := Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then
ProductVersion.Caption := '产品版本: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then
FileDescription.Caption := '文件说明: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then
LegalCopyright.Caption := '合法版权: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then
FileVersion.Caption := '文件版本: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then
CompanyName.Caption := '公司名称: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then
LegalTrades.Caption := '合法商标: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then
InternalName.Caption := '内部名称: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then
OriginalFilename.Caption := '原文件名: ' + Value;
FreeMem(Buf, BufSize);// OperatingSystem.Caption := GetOSVerInfo;// SystemMemory.Caption := GetMemStat;
end
else begin
Application.MessageBox('获取产品信息时遇到致命错误,请尝试重新启动软件。'+ #13 + '若仍未能解决问题,请联系产品服务人员。','错误',MB_OK + MB_ICONSTOP);
Application.Terminate;
end;
>>现在我的问题就是怎样来提取软件的版本号并使得用户只能有新的版本
這個更難!!!