2010-04-28 26 views

Trả lời

45

Sử dụng đối tượng System.OperatingSystem, sau đó lọc theo số lớn & Số phiên bản nhỏ.

Tôi đã sử dụng các chức năng này trong quá khứ:

static bool IsWinXPOrHigher() 
{ 
    OperatingSystem OS = Environment.OSVersion; 
    return (OS.Platform == PlatformID.Win32NT) && ((OS.Version.Major > 5) || ((OS.Version.Major == 5) && (OS.Version.Minor >= 1))); 
} 

static bool IsWinVistaOrHigher() 
{ 
    OperatingSystem OS = Environment.OSVersion; 
    return (OS.Platform == PlatformID.Win32NT) && (OS.Version.Major >= 6); 
} 
+0

PlatformID vẫn là Win32NT nếu hệ điều hành là 64 bit? – AngryHacker

+2

@AngryHacker PlatformID.Win32 = "Hệ điều hành là Windows NT hoặc mới hơn.", Vâng. – ParmesanCodice

+1

Tôi đã thay đổi mã cho IsWinXp để kiểm tra xem đó là Windows XP hay cao hơn. Tương tự với Vista. – AngryHacker

9

Kiểm tra thuộc tính Major lớn hơn hoặc bằng 5 và nếu 5 thì Minor ít nhất là 1. (XP là 5.1, 2003 là 5.2, Vista/2008 là 6.0).

List of Windows Version Numbers on MSDN.

+2

... và Windows 7 là 6.1 – Esko

+3

Lưu ý rằng WinXP 32 bit là phiên bản 5.1; WinXP 64 bit là phiên bản 5.2. –

+0

Và đây chính là lý do tại sao bạn nên tìm kiếm thứ bạn cần thay vì kiểm tra số phiên bản, và tại sao Win7 là phiên bản 6.1 và không phải là 7.0. Việc kiểm tra số phiên bản rất dễ bị sai và không phải lúc nào cũng cho bạn biết bạn muốn biết điều gì. – Stewart

5

Bạn không nên kiểm tra số phiên bản. Thay vào đó, bạn nên kiểm tra các chức năng bạn cần. Nếu đó là một API cụ thể mà bạn đang theo dõi, ví dụ, LoadLibrary và GetProcAddress nó - theo cách đó, bạn không phụ thuộc vào số phiên bản.

+0

Cho rằng sự phụ thuộc là lý do anh ta cần phiên bản, đó là một ý tưởng thực sự tốt. – daramarak

+0

Bạn sẽ kiểm tra xem liệu hệ điều hành có hỗ trợ RegFree COM không? – AngryHacker

+0

Hãy thử tải một thành phần từ tệp kê khai của bạn. Nếu nó không hoạt động, nền tảng không hỗ trợ miễn phí COM – Stewart

Các vấn đề liên quan