2011-11-02 28 views
1

是否有可能使用Delphi安裝Minecraft版本?
有趣的部分是我需要閱讀 %appdata%\.minecraft\bin\minecraft.jar版本。
但沒有META-INF\MANIFEST.MF閱讀。獲取已安裝的Minecraft版本與德爾福

+0

你想弄清楚版本號,或者是什麼? – thedaian

+0

是的。我不知道Minecraft,但是如果主EXE在每個版本中都有相同的路徑,那麼你可以簡單地從這個EXE讀取版本信息,[像這樣](http://stackoverflow.com/questions/5539316/how - 可以 - 我讀 - 細節-的文件)。如果文件路徑不同,那麼migth可以使用應用程序路徑註冊表項來找到它。 –

+0

@JohnRiselvato什麼是鏈接? – GolezTrol

回答

2

我相信JAR files實際上只是ZIP文件,而且我聽說Delphi的最新版本有一個帶有工具的單元來訪問Zip文件。我對JAR文件的內部結構並不熟悉,但是如果您是,並且您正在尋找的版本信息存在於某處,那麼您應該能夠以這種方式提取它。

4

Java程序沒有版本,除非它在Manifest文件中指定。

也許開發人員在JAR文件中的某些自述文本文件或某些其他資源中留下了版本號,正如您所知,它只是一個ZIP壓縮文件。

如果沒有這些工作,另一種方法是根據文件大小構建雷區版本的目錄。使用System FileSize()函數獲取JAR文件的文件大小並在目錄中查找它。

根據具體情況,如果在您的目錄中未找到文件大小,則可能會認爲它比您已編目的最新版本更新。

甚至比依靠文件大小爲您的目錄會生成一個哈希。即使CRC32也足夠了。

+0

這不完全正確,請看'java.lang.Package.getImplementationVersion' – OnTheFly

+0

@ user539484,感謝您的信息。該文檔聲明'java.lang.Package.getImplementationVersion'從清單文件中獲取它的信息。 –

+0

這使我錯了,因爲清單可能會丟失或篡改(AFAIK,清單中的版本標記甚至是可選的)。隨機觀察:''java -jar IDL2Pas.jar -version'打印'[XFEIDL] 03.03.03.C1.A2 [XBEJAV]'括號內的字符串來自'Messages.properties'文件,但那些5個八位字節? – OnTheFly

2

是的,這是可能的。您可以使用mojang提供的this xml data

例如:

<Contents> 
<Key>11w47a/minecraft.jar</Key> 
<LastModified>2011-11-24T13:20:06.000Z</LastModified> 
<ETag>"2ad75c809570663ec561ca707983a45b"</ETag> 
<Size>2242242</Size> 
<Owner>...</Owner> 
<StorageClass>STANDARD</StorageClass> 
</Contents> 

正如你可以看到他們提供的<Key>標籤版本和文件名。二進制的md5總和存儲在<ETag>標記中。只要你沒有修改你的jar,這應該足以檢查版本。