更新如何正確使用IsWindowsXPOrGreater函數?
我已經重寫了原來的問題如前文不是描述我的真正的問題更多的是一個故事:
我們有一組應用程序面向Windows XP達到Windows 8.1和Windows Server 2008 2012(也支持32位/ 64位版本)。以前,我們在代碼中沒有做任何事情來確保您在這些平臺上運行。
在創建我們的Windows API包裝類集時,我們對使用IsWindowsXPOrGreater
函數調用進行了更改。如果這個調用返回false,我們會拋出一個異常,這個異常將被捕獲並導致顯示錯誤消息。
但是,該錯誤消息是通過跳過一組Windows API調用創建的。根據MSDN的大部分調用需要Windows 2000或更高版本,但少數是Windows XP或更高版本。
在實現單元測試和mod之後,我開始懷疑如果我們在Windows XP之前的任何軟件上運行該軟件,代碼將實際運行 - 因爲IsWindowsXPOrGreater
函數需要Windows 2000或更高版本,否則錯誤消息模塊將失敗在他們對Windows API的調用中。
我已經向我的同事們展示過,如果我強制IsWindowsXPOrGreater
給出錯誤返回,會引發異常,但最終會導致無限循環,因爲我們的錯誤消息模塊會引發異常的另一個實例,我們再次選取嘗試使用Windows API等。
問題
如果IsWindowsXPOrGreater
返回false的Windows API調用是安全的任何32位安裝Windows操作系統的使用?
對於大多數Windows API函數,MSDN似乎顯示了Windows 2000或Windows XP的最低限度。是否有早期版本的User32.dll,Kernel32.dll等文件?
我目前的解決方法
我們從此改變了我們的代碼搭上新LowerThanWindowsXPException
- 將使用一種變型包裝器MessageBox
終止應用程序之前顯示一個簡單的信息。這個變體不檢查windows版本,並且基於我們已經存在的一些遺留的Visual Basic代碼。這在Windows 95上工作,雖然我們現在沒有辦法檢查。
未來我們將使用IsWindows7OrGreater
進行其他Windows API調用,在這些情況下,我們將引發一個LowerThanWindows7Exception
- 我們可以採用不同的方式進行處理(例如,使用我們的Windows XP API調用來顯示錯誤消息或下降回到一些替代功能)。
這是太多的文字,但如果任何人使用早於Windows XP的東西,並且您不知道它,那麼您可能不應該在乎它們。 – 2015-02-24 07:43:19
我已經閱讀了兩次,但仍然無法解決你所問的問題。 – 2015-02-24 08:56:57
如果在XP系統之前沒有使用過,那麼你爲什麼要檢查它? – 2015-02-24 09:35:16