如何得知程式的版本? |
|
junlin
初階會員 發表:66 回覆:94 積分:42 註冊:2002-03-13 發送簡訊給我 |
|
lee
站長 發表:55 回覆:173 積分:45 註冊:2002-02-27 發送簡訊給我 |
|
junlin
初階會員 發表:66 回覆:94 積分:42 註冊:2002-03-13 發送簡訊給我 |
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 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
小弟用 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 發送簡訊給我 |
引言: 小弟用 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. 單步追蹤後, 發現錯誤在此行這是因為本身NOTEPAD.EXE含有版本資訊 你可以在NOTEPAD.EXE按右鍵看內容,會有版本的頁次出現 而AUTOEXEC.BAT按右鍵看內容,則沒有版本資訊 在跑到 VerQueryValue(pointer(VersinInfo), '\', pointer(pv_info), VersinInfoSize); 該行時,VersinInfo變數會是 nil所以跑到那就錯了 所以只要在你要用的該檔加上版本訊息即可VerQueryValue(pointer(VersinInfo), '\', pointer(pv_info), VersinInfoSize);用 C:\WINDOWS\NOTEPAD.EXE (檔案確定存在) 測試, 則是正常 PS: Windows XP PRO Delphi 7.1 Enterprise |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |