線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4532
推到 Plurk!
推到 Facebook!

如何得知程式的版本?

 
junlin
初階會員


發表:66
回覆:94
積分:42
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-03-29 13:53:50 IP:61.218.xxx.xxx 未訂閱
若要取得某一個EXE檔(delphi寫的)的版本,請問該如何下手? 謝謝
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-04-02 07:54:03 IP:61.219.xxx.xxx 未訂閱
您是指在project options內的version info嗎?    ~~~Delphi K.Top討論區網站管理員~
------
~~~Delphi K.Top網站總管~~~
junlin
初階會員


發表:66
回覆:94
積分:42
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-04-11 17:52:54 IP:61.218.xxx.xxx 未訂閱
thank you ,我已找到,如下
function TfrmAutoUpdate.GetVersionNo(FilePath: string): string;
var VersinInfo: Pchar; //版本資訊
    VersinInfoSize: DWord; //版本資訊size (win32 使用)
    pv_info: PVSFixedFileInfo; //版本格式
    Mversion,Sversion:string;  //版本No
begin
  VersinInfoSize := GetFileVersionInfoSize(pchar(FilePath), VersinInfoSize);
  VersinInfo := AllocMem(VersinInfoSize);
  try
    GetFileVersionInfo(pchar(FilePath), 0, VersinInfoSize, Pointer(VersinInfo));
    VerQueryValue(pointer(VersinInfo), '\', pointer(pv_info), VersinInfoSize);
    Mversion := inttohex(pv_info.dwProductVersionMS, 0);
    Mversion := copy('00000000', 1, 8 - length(Mversion))   Mversion;
    Sversion := inttohex(pv_info.dwProductVersionLS, 0);
    Sversion := copy('00000000', 1, 8 - length(Sversion))   Sversion;
    Result := FloatToStr(hextoint(copy(MVersion, 1, 4)))   '.'  
              FloatToStr(hextoint(copy(MVersion, 5, 4)))   '.'  
              FloatToStr(hextoint(copy(SVersion, 1, 4)))   '.'  
              FloatToStr(hextoint(copy(SVersion, 5, 4)));
  finally
    FreeMem(VersinInfo, VersinInfoSize);
  end;
end;
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-04-11 17:57:23 IP:61.219.xxx.xxx 未訂閱
感謝會員junlin無私的發表文章!    ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-09 10:24:28 IP:210.69.xxx.xxx 未訂閱
[Error] Unit1.pas(41): Undeclared identifier: 'hextoint'
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-11 00:05:18 IP:220.131.xxx.xxx 未訂閱
 function HexToInt(HexNum: string): LongInt;
begin
  Result:=StrToInt('$'   HexNum);
end;    
網海無涯,唯學是岸!
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-16 23:03:39 IP:211.21.xxx.xxx 未訂閱
3Q,3Q BCB6 & Delphi 7 的 help 範例(取檔案版本)都是錯的 無法順利執行 , 這個果然可以 .....
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-17 11:01:59 IP:210.69.xxx.xxx 未訂閱
    小弟用 C:\AUTOEXEC.BAT (檔案確定存在, 有內容) 測試 , 錯誤訊息如下     Project Project1.exe raised exception EAccessViolation with message 'Access violation at address 77BD11C7 in module 'version.dll'. Read of address 00000004'. Process stopped. Use Step or Run to continue. 單步追蹤後, 發現錯誤在此行
VerQueryValue(pointer(VersinInfo), '\', pointer(pv_info), VersinInfoSize);
 
用 C:\WINDOWS\NOTEPAD.EXE (檔案確定存在) 測試, 則是正常 PS: Windows XP PRO Delphi 7.1 Enterprise
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
singend
一般會員


發表:3
回覆:8
積分:2
註冊:2003-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-10 18:31:18 IP:203.70.xxx.xxx 未訂閱
引言: 小弟用 C:\AUTOEXEC.BAT (檔案確定存在, 有內容) 測試 , 錯誤訊息如下 Project Project1.exe raised exception EAccessViolation with message 'Access violation at address 77BD11C7 in module 'version.dll'. Read of address 00000004'. Process stopped. Use Step or Run to continue. 單步追蹤後, 發現錯誤在此行
VerQueryValue(pointer(VersinInfo), '\', pointer(pv_info), VersinInfoSize);
 
用 C:\WINDOWS\NOTEPAD.EXE (檔案確定存在) 測試, 則是正常 PS: Windows XP PRO Delphi 7.1 Enterprise
這是因為本身NOTEPAD.EXE含有版本資訊 你可以在NOTEPAD.EXE按右鍵看內容,會有版本的頁次出現 而AUTOEXEC.BAT按右鍵看內容,則沒有版本資訊 在跑到 VerQueryValue(pointer(VersinInfo), '\', pointer(pv_info), VersinInfoSize); 該行時,VersinInfo變數會是 nil所以跑到那就錯了 所以只要在你要用的該檔加上版本訊息即可
系統時間:2024-04-27 13:04:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!