2011-11-03 53 views
1

我們安裝的Windows偶爾會檢測到錯誤版本的Windows。 (它通過內置Wise安裝程序功能檢測版本來檢測系統信息,並沒有說明它是如何做到的)。如何通過Win API調用讀取Windows生成版本或(更好地)讀取註冊表值

所以,我正在尋找另一種方式來檢測Windows版本。 Wise安裝程序的能力相當有限,因爲它可以調用Windows API函數,因此從註冊表或特定文件中讀取會更容易(當然,我必須將文件版本映射到Windows版本)。

我發現此討論主題: http://www.velocityreviews.com/forums/t513244-best-way-to-get-version-from-registry.html 但它沒有引用。所以我不確定它有多可靠。

+1

這可能是故意的,Windows使用appcompat墊片。這隻會讓你再次閱讀相同的版本。對供應商進行支持。 –

+0

微星包或專有格式? –

+0

這是使用專有的Wise .exe格式(不是MSI) –

回答

1

我明白你寧願不使用的API,但如果你不相信什麼明智的給你,這可能是可以肯定的唯一途徑:

GetVersionEx()http://msdn.microsoft.com/en-us/library/ms724451(v=VS.85).aspx

有示例代碼(以及關於可能更接近您實際需要的備用功能的許多評論)。

+0

如果您在Win 7計算機上以兼容模式(對於XP)運行應用程序,則不會報告真正的(安裝的)Win O/S版本。來自微軟:「如果兼容模式生效,GetVersionEx函數會報告操作系統,因爲它可能不是已安裝的操作系統,例如,如果兼容模式生效,GetVersionEx會報告操作系統被選爲應用程序兼容性。「 –

+0

是的,但它會報告Windows選擇告訴你的版本,以便讓你做你應該做的事情:)試圖想出兼容模式通常是有用的,只有當你試圖破壞你的應用程序。 –

1

如果你想要一個註冊表解決方案,你可以看一下鍵值:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion並檢查ProductVersion,CurrentVersion,CurrentBuild的值。

+0

好主意,但是當我在「Windows兼容模式(對於XP SP3)」中運行.exe時,它報告了Windows XP(在Win 7機器上) –

+0

要避免這種情況將非常困難。操作系統報告,如果你下降到像C++這樣的低級語言,看起來你可以得到這個版本。參見http://msdn.microsoft.com/en-us/library/ms724832(v=vs.85).aspxa – rmcsharry

相關問題