是,文件版本和ProductVersions無關。 ProductVersion顯示在「添加/刪除程序」(「程序和功能」)中,主要用於主要升級場景期間決定發生的情況。
ProductVersion屬性定義爲[0-255]。[0-255]。[0-65535](分別爲8,8,16有符號位) 文件版本定義爲[0-65535]。[0 [0-65535]。[0-65535](16,16,16,16有符號位...)
Text/XML/Config/BMP ectera將爲空。通常,您的創作工具(如InstallShield)會在構建時反映您的版本化PE文件(DLL,OCX,SYS,EXE ...),並自動將它們的版本編號創建到File表中。
在構建時,InstallShield中還有一個名爲「始終覆蓋」的版本「向版本謊言」,並告訴它您的非PE文件(TXT/XML ....)確實有版本號(通常是65535.0.0.0)這會利用MSI中的行爲,即在決定是否覆蓋時版本控制文件勝出非版本控制文件。
Tecnically一個EXE可以是非版本,但是這是一個反模式。非版本化文件是沒有嵌入版本資源記錄的任何文件。
要理解的另一件事是默認情況下,Windows安裝程序在決定src文件是否應覆蓋目標時查看目標文件的創建日期和修改日期。如果CD和MD相同,它被認爲是「處女」(我的術語),併發生覆蓋。如果它們不相等,則認爲是「用戶數據」,除非您執行始終覆蓋技巧,否則不會被覆蓋。
要理解的另一件事是這些評估發生在組件的密鑰文件級別。組件中的任何其他伴隨文件(如果沒有遵循每個組件準則的1:1文件)將遵循密鑰文件的指示。
也意識到存在的AssemblyVersion和的AssemblyFileVersion之間的差異。這個。NET AssemblyFileVersion屬性映射到舊版FileVersion屬性。 AssemblyVersion屬性僅用於強命名的目的,MSI不關心它。
最後,谷歌「Windows安裝程序組件規則」瞭解更多信息。
請讓我知道這是否有意義,如果您有任何其他問題。你實際上在一個問題中詢問了十幾個問題,所以我可能會錯過一些東西。也請隨時接受這個答案。
謝謝,這有幫助。視覺工作室或插件中是否有任何設施可以自動撞擊FILEVERSION? PRODUCTVERSION在VS_VERSION_INFO中有什麼意義。版本12.2.16和12.02.16是否相同? – 2012-02-16 15:01:23
這是一個完全不同的蠕蟲處理構建自動化和連續集成,它負責構建您的應用程序和您的應用程序安裝程序。您將希望該過程對應用程序文件進行版本化並將產品版本屬性傳遞給安裝程序版本。有很多取決於你的構建環境的樣子。我個人使用的團隊基礎服務器團隊建設與http://tfsversioning.codeplex.com/一起您可能會使用InstallShield或Wise或VB6,Deplhi,PowerBuilder,C#,Java我知道的所以沒有具體的答案。 – 2012-02-16 15:04:24
MSIEXEC是否真的檢查.exe文件中的版本是否與文件表中的版本匹配? – 2012-02-16 22:10:48