2011-10-27 63 views
2

Windows EXE文件附有版本號,由四個由點分隔的數字(例如1.0.0.0)組成。EXE版本號 - 如何正確比較次要版本

問題:什麼是比較這些數字的正確方法?尤其是,1.15.0.0> 1.2.0.0(自15> 2)或反之亦然(因爲在數學上爲1.15 < 1.2)?


背景:我的一個應用程序已經達到3.9 *和我想知道wheter我可以繼續3.10 *沒有這種比較導致麻煩的版本號安裝程序或其他組件。

+0

由於組件是分開的,我會將它們視爲單獨的數字,即15> 2,但我想這取決於編寫應用程序的人的約定。 – Rup

+0

@Rup:由於EXE文件格式是標準化的,而且這些版本號可以通過Windows API讀取,我猜他們的語義也是標準化的。 – Heinzi

+1

http://msdn.microsoft.com/en-us/library/system.version.aspx – Mob

回答

3

正確的方法是考慮每個組分(用句點分隔的「」)依次爲數字而非字符串值。因此,是1.15.0.0是> 1.2.0.0

如果您使用Powershell,它有一個內置的版本對象(基於.NET的System.Version類型):[version],它將爲您執行此功能。

[作爲參考,各個部件是Major.Minor.Build.Revision]

1

如MSDN at this page指出:

版本由兩個32位整數的,由4個16位 整數定義。

這意味着,給定兩個版本的格式「Major.Minor.Release.Build」,你可以相信你一定會最終有足夠的數據來組裝成這樣的64位無符號整數:

int64_t i1 = (v1->Major << 48) | (v1->Minor << 32) | (v1->Release << 16) | v1->Build; 
int64_t i2 = (v2->Major << 48) | (v2->Minor << 32) | (v2->Release << 16) | v2->Build; 

所以,你可以現在只是比較喜歡兩個64位值:

if (i1 > i2) { ... } 

對不起,5年後解決它,但我走來走去......