论坛风格切换切换到宽版
  • 5804阅读
  • 2回复

VersionInfo 的觀念 [复制链接]

上一主题 下一主题
离线kiiali
 
发帖
805
金钱
0
威望
0
只看楼主 倒序阅读 0 发表于: 2002-11-05
Date: Thu, 11 Mar 1999 21:)34 +0800
To: Patch-author <patch-author@cpatch.org>
From: Kii Ali <kiiali@cpatch.org>
Subject: VersionInfo 的觀念
您好,弟是_Kii_Ali
其實「版本建置」的觀念,或許有人很清楚,弟順便把所知的整理出來
,並試著如何修改它。如果有錯誤,還請指正。
底下是用 BC++ 5.02 把jqjq 版 winamp 2.09 的 versioninfo 匯出來,
vc 會有一些小小不同。會在文中說明。請先複習底下的各項項目。

▓0.範例
1 VERSIONINFO
FILEVERSION 2, 0, 0, 5
PRODUCTVERSION 2, 0, 0, 5
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_DLL
{
BLOCK "StringFileInfo"
{
BLOCK "040904b0"
{
  VALUE "Comments", "Visit http://www.winamp.com/ for updates"
  VALUE "CompanyName", "Nullsoft"
  VALUE "FileDescription", "Winamp"
  VALUE "FileVersion", "2.05"
  VALUE "InternalName", "WINAMP"
  VALUE "LegalCopyright", "Copyright 251 1997-1998, Nullsoft, Inc."
  VALUE "LegalTrademarks", "Nullsoft and Winamp are trademarks of Nullsoft, Inc."
  VALUE "OriginalFilename", "Winamp.exe"
  VALUE "PrivateBuild", "1"
  VALUE "ProductName", "Nullsoft Winamp"
  VALUE "ProductVersion", "2.05"
  VALUE "SpecialBuild", "1"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 1033, 1200
}
}

▓1.版本標示
1.1在 nt 是利用這一段來辨認,「檔案版本」及「產品版本」
FILEVERSION 2, 0, 0, 5
PRODUCTVERSION 2, 0, 0, 5
一定要用這個「逗號空一格」的四位數字格式,並且只能用數字,而
不能用文字。否則 bc 或 vc 會無法 compile 。這樣在 nt 顯示出來
的結果就會變成 2.0.0.5 。
 
當然您可以在每個空格填到滿,比如 2, 0, 1033, 2 ,這樣就會顯示
2.0.1033.2 這種版本號碼。
你可以看到某些比較偷懶的版本會只寫 1, 0, 0, 1 ,這是內定值,代表
原作者偷懶的。
1.2 在 win98則是利用這一段來辨認與顯示。
  VALUE "FileVersion", "2.05"
  VALUE "ProductVersion", "2.05"
這就可以「做怪」填入文字了。比如我曾填過 1.29 (976) 這種版號。
當然您要跟上一段填不一樣也沒關係。最好填一樣,比如上面可以填
1, 29, 976, 0 這種版本號碼。
▓2.語系標示
bc 與 vc 的情形不同。您可以看到前後兩段的數字相關的。
BLOCK "040904b0"
VALUE "Translation", 1033, 1200 (bc++ 顯示)
VALUE "Translation", 0x409, 1200 (vc++ 顯示)
我們把 BLOCK "040904b0" 的數字分成兩段。0409 + 04b0
頭四個數字 0409 代表使用的語系,剛好跟底下的 1033 或 0x409 相
符。BC 裡面的 1033 這個數字是這樣來的,0x16^3 + 4x16^2 +
0x16^1 + 9x16^0 = 1033 ,原來是十六進位。0409 剛好是英文語系,
0409 是中文(繁體)語系,0809 是中文 (簡體)語系,這些可以由對照
表查到。
後四個數字 04b0 則是另一個編碼方式。(1200) 是指 unicode 的方式
。某些版本則會填上 (950) 代表 Windows (Taiwan) ,現在已多半不用
這種編碼方式了。絕大部分都是使用 (1200) 來表示。
如果上面看不懂沒關係,這個版本數字(繁體中文)照抄就好了。這兩個
數字如果不能配合,將導致 VersionInfo 無法顯示。
BLOCK "040404b0"
VALUE "Translation", 1028, 1200   (bc++ 顯示)
VALUE "Translation", 0x404, 1200 (vc++ 顯示)
▓3.檔案標示
3.1.下面是「檔案旗標mask」「檔案型態」、「適用作業系統」等。
  通常這個我們不用改。
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_DLL
3.2.「檔案旗標」下面這個不常出現,通常會伴隨幾個說明項一起出現。
FILEFLAGS VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD
  VALUE "PrivateBuild", "1"
  VALUE "SpecialBuild", "1"

▓4.各項說明
底下各個 Value 都會在 Win95, NT 的「內容」裡面出現。在 Win98
裡面的版本是用 FileVersion ,而 nt 卻不是用這個來辨認。
備註       VALUE "Comments", "Visit http://www.winamp.com/ for updates"
公司名稱   VALUE "CompanyName", "Nullsoft"
*說明     VALUE "FileDescription", "Winamp"
*檔案版本   VALUE "FileVersion", "2.05"
內部名稱   VALUE "InternalName", "WINAMP"
*著作權     VALUE "LegalCopyright", "Copyright 251 1997-1998, Nullsoft, Inc."
合法商標   VALUE "LegalTrademarks", "Nullsoft and Winamp are trademarks"
原始檔名   VALUE "OriginalFilename", "Winamp.exe"
專用建置說明 VALUE "PrivateBuild", "1"
產品名稱   VALUE "ProductName", "Nullsoft Winamp"
產品版本   VALUE "ProductVersion", "2.05"
特殊建置說明 VALUE "SpecialBuild", "1"
有 * 星號的部分是顯示在上面的。
不要忘了 BC++ 各項的 Value 值尾巴都有結束號碼 ,忘了填就會
跟下面的值連起來合併。VC++ 的值是 ,略不一樣。上次 Tang 建議
說在 "SpecialBuild" 填入一些辦識字串,而儘可能不在 about 畫面。
我是這樣填的,您參考看看。
  VALUE "SpecialBuild", "Chinese version translated, Kii Ali, at Chinese Patch Association."
更狠一點,可以這樣做,連「特殊建置」都不用了。
  VALUE "cpatch", "Kii Ali"
在BC++ 裡面唯一的缺點是,各項 value 不能填入中文,否則 compile
之後一定變成亂碼。而 VC++ 沒有這種問題。目前尚無解決方案。
自 2003 年起,Kii Ali 所有繁體版作品 "Help" 將譯為「幫助」,回歸軟體原始本意,不再遵照微軟的過度翻譯,而造成使用上的誤解。
离线kiiali
发帖
805
金钱
0
威望
0
只看该作者 1 发表于: 2002-11-05
From: "Jonson" <jonson@ms5.url.com.tw>
To: "Patch-author" <patch-author@cpatch.org>
Subject: Re: VersionInfo vs. eXeScope
Date: Fri, 12 Mar 1999 03:)03 +0800
您好,我是 Jonson
VersionInfo 的觀念 Kii Ali 說得非常詳細,
毌用我再多說,但針對 VersionInfo 在 BC++ 中
無法使用中文一項,僅提供我的作法。
其實並沒有任何技巧,只要中文化完後再用
eXeScope 中文化 VersionInfo 的部份即可。
不過這步驟一定要在最後做。因為 eXeScope 與
BC++ 對 VersionInfo 的讀取、寫入方式皆不同,
若使用 eXeScope 更改 VersionInfo 再經 BC++
存檔過,eXeScope 就會認不得 VersionInfo 的資料,
再使用 eXeScope 開啟所看到的一定是一堆亂碼。
順便提一下,eXeScope 真是非常好用的軟體,
許多 BC++ 無法開啟或 BC++ 中文化後便無法正常
執行的軟體,若使用 eXeScope 都沒有問題。
使用 BC++ 作中文化的我,都會在中文化
完後搭配 eXeScope 作 VersionInfo 及 圖形的處理。
若要修改圖形,我會使用 eXeScope 將圖形匯出,
將之存成 BMP 檔,然後用圖形處理軟體加工,
在中文化完成後再用 eXeScope 將圖形匯入。
如此一來,VersionInfo 及 圖形的處理都不會出問題,
( 至少在我處理過的軟體都沒有問題 )
當然這只是我的作法,或許您會有更好的作法,
所以我在此「拋磚引玉」一下。
自 2003 年起,Kii Ali 所有繁體版作品 "Help" 將譯為「幫助」,回歸軟體原始本意,不再遵照微軟的過度翻譯,而造成使用上的誤解。
离线kiiali
发帖
805
金钱
0
威望
0
只看该作者 2 发表于: 2002-11-05
X-Sender: kiiali@cpatch.org
Date: Sat, 05 Jun 1999 04:)40 +0800
To: Patch-author <patch-author@patch.hort.ntu.edu.tw>
From: Kii Ali <kiiali@cpatch.org>
Subject: VersInfo (續)

您好,弟是_Kii_Ali
上次提過的 VersionInfo ,弟再做了幾次 vc 下的實驗,算是整理自己的
心得吧。弟儘可能提得湴滓稽c,如果看不懂的,建議您實作看看,有實作
過的才能完全搞清楚這段說什麼。如果你覺得非常生硬,建議您先複習此文件。
ftp://ftp.nsysu.edu.tw/cpatch/faq/tech/tech_versinfo.txt

▓FILEFLAGS
或許可以翻譯做「檔案旗標」,標示這個檔案是已正式 release,
prerelease 或是 debug 版本。在 vc 底下有三種情形。
1.VS_FF_PRERELEASE 未打勾,VS_FF_DEBUG 未打勾
FILEFLAGS 0x0L
2.VS_FF_PRERELEASE 未打勾,VS_FF_DEBUG 呈現灰色
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
3.VS_FF_PRERELEASE 打勾後,VS_FF_DEBUG 仍然呈現灰色
#ifdef _DEBUG
FILEFLAGS 0x3L
#else
FILEFLAGS 0x2L
▓ FILEOS
適用的作業系統,目前常見者幾乎都是 Windows 32 了。以 FILEOS 0x4L
最為常見。對照表如下。
0x0L   VOS_UNKNOWN
0x10000L VOS_DOS
0x40000L VOS_NT
0x1L   VOS__WINDOWS16
0x4L   VOS__WINDOWS32
0x10001L VOS_DOS_WINDOWS16
0x10004L VOS_DOS_WINDOWS32
0x40004L VOS_NT_WINDOWS32
1.以 vc++ 而言,可以在 VersionInfo 此段很視覺化的修改,其 rc 檔顯示
FILEOS 0x4L
2.BC++ 則需要直接改文字檔,如下。
FILEOS VOS__WINDOWS32
▓ FILETYPE
標示檔案類型,包括執行檔、動態連結檔,驅動程式等等。
FILETYPE 0x2L
0x0L VFT_UNKNOWN
0x1L VFT_APP
0x2L VFT_DLL
0x3L VFT_DRV
0x4L VFT_FONT
0x5L VFT_VXD
0x7L VFT_STATIC_LIB
1.以 vc++ 而言,可以在 VersionInfo 此段很視覺化的修改,其 rc 檔顯示
FILETYPE 0x1L
2.BC++ 則需要直接改文字檔,如下。
FILETYPE VFT_APP
▓ FILESUBTYPE
標示檔案次類型,這一段只有對 Font 屬性 (即 Filetype 0x4L )有用。
一般都是沒有使用的 unkown 的狀態。
FILESUBTYPE 0x0L
0x0L VFT2_UNKOWN
0x1L VFT2_FONT_RASTER
0x2L VFT2_FONT_VECTOR
0x3L VFT2_FONT_TRUETYPE
1.在 vc++ 而言,只能在 filetype 選擇 font 時方能使用。否則一定是
unkown 的狀態。
FILESUBTYPE 0x0L
2.BC++ 則需要直接改文字檔,如果不是 FONT 屬性,就根本不顯示了。

▓ BLOCK HEADER
以 VC 而言有八個 16 進位數字,前四個為 Language ID ,後四個為
Code Page 。在 translation 則是前者為 Language ID 而後者為
Code Page 。在 block 和 translation 兩段的設定一定一致,否則
輕則 VersionInfo 無法顯示,重則程式不能執行。但「語系id」和「
代碼頁」是兩個不一樣的觀念,兩個甚至可以「不相關」,不要搞混了
。如下例:
    BLOCK "040904e4"
    VALUE "Translation", 0x409, 1252 (VC 顯示)
    VALUE "Translation", 1033, 1252   (BC 顯示)
0409 為 Language ID,代表 English (U.S.) 語系,04e4 或 1252
為 Windows Multilingual ,我們可以從下面的對照表取得。
====================================================
A = Block Header 中所標示的 Code Page 代碼 (16進位)
B = Translation 中所標示的 Code Page 代碼 (10進位)
C = VC 中出現的 Code Page 名稱
A   , B   , C
----------------------------------    
0000,   0 7-bit ASCII
03a4, 932 Windows Japan
03b5, 949 Windows Korean
03b6, 950 Windows Taiwan
04b0, 1200 Unicode
04e2, 1250 Windows Latin-2
04e3, 1251 Windows Cyrillic
04e4, 1252 Windows Multilingual
04e5, 1253 Windows Greek
04e6, 1254 Windows Turkish
04e7, 1255 Windows Hebrew
04e8, 1256 Windows Arabic
====================================================

一般改中文化需要將 block header 的代碼改為中文,unicode (而
非改為 Windows Taiwan,雖然也有人這樣改,但終究不是正確做法)
,如下。
    BLOCK "040404b0"
    VALUE "Translation", 0x404, 1200 (VC 改法)
    VALUE "Translation", 1028, 1200 (BC 改法)
通常是照抄即可,大部分程式也都沒有問題。弟只有碰過 Netscape
Plugins 的 block header 一定要維持 Multilingual,否則便不能
執行。
自 2003 年起,Kii Ali 所有繁體版作品 "Help" 將譯為「幫助」,回歸軟體原始本意,不再遵照微軟的過度翻譯,而造成使用上的誤解。