2009-05-13 25 views
16

là gì là tốt nhất để xác định hệ điều hành của Microsoft được lưu trữ ứng dụng ASP.NET của bạn bằng cách sử dụng namespace System.Environment.OSVersionXác định hệ điều hành sử dụng Environment.OSVersion

Tôi cần một ví dụ cho Windows XP, Windows Server 2003 và Windows Vista

Dưới đây là những gì tôi đang cố gắng để thực hiện bằng giả

switch(/* Condition for determining OS */) 
{ 
    case "WindowsXP": 
     //Do Windows XP stuff 
     break; 
    case "Windows Server 2003": 
     //Do Windows Server 2003 stuff 
     break; 
    case "Windows Vista": 
     //Do Windows Vista stuff 
     break; 
} 

Trả lời

16

Sau đây nên làm việc. Nhưng tại sao bạn quan tâm? Chỉ dành cho mục đích thông tin trong ghi nhật ký hoặc bạn đang tìm kiếm các khả năng thực sự có mặt trên nền tảng đích?

if (Environment.OSVersion.Version.Major == 5) 
{ 
    if (Environment.OSVersion.Version.Minor == 1) 
    { 
      // XP 
    } 
    else if (Environment.OSVersion.Version.Minor == 2) 
    { 
      // Server 2003. XP 64-bit will also fall in here. 
    } 
} 
else if (Environment.OSVersion.Version.Major >= 6) 
{ 
     // Vista on up 
} 
+0

Tôi cần tạo chuỗi tác nhân người dùng IE chính xác dựa trên hệ điều hành nào đang lưu trữ dịch vụ cửa sổ của tôi –

+0

Số phiên bản chính/nhỏ không đủ? như sau: Mozilla/4.0 (tương thích; MSIE 7.0b; Windows NT 6.0) – Michael

+4

có cách nào để phân biệt giữa XP64 và Server 2003 không? – Patrick

2
if(Environment.OSVersion.Version.Major > 5) { /* vista and above */ } 
+0

tôi cần phải làm những việc khác nhau cho mỗi phiên bản hệ điều hành. Tôi đã nghĩ đến một chuyển đổi hoặc nếu/else tuyên bố –

+0

Câu trả lời sai! Nó phải là: nếu (Environment.OSVersion.Version.Major> 6) {/ * vista và ở trên * /} – Gerrit

10

Không phải là một danh sách đầy đủ, nhưng có điều này từ http://support.microsoft.com/kb/304283:

 
+--------------------------------------------------------------+ 
|   |Windows|Windows|Windows|Windows NT|Windows|Windows| 
|   | 95 | 98 | Me | 4.0 | 2000 | XP | 
+--------------------------------------------------------------+ 
|PlatformID | 1  | 1  | 1  | 2  | 2  | 2  | 
+--------------------------------------------------------------+ 
|Major  |  |  |  |   |  |  | 
| version | 4  | 4  | 4  | 4  | 5  | 5  | 
+--------------------------------------------------------------+ 
|Minor  |  |  |  |   |  |  | 
| version | 0  | 10 | 90 | 0  | 0  | 1  | 
+--------------------------------------------------------------+ 

Chỉnh sửa: Lưu ý, các thông tin được trả về bởi System.Environment.OSVersion có thể không đáng tin cậy nếu ứng dụng đang chạy trong chế độ tương thích.

Edit2: Tôi muốn giới thiệu bạn chỉ cần làm cho nó một giá trị có thể cấu hình trong ứng dụng của bạn - cách mà mã của bạn không cần phải biên dịch lại khi một hệ điều hành mới đi ra, ví dụ, Windows 7.

+0

Tôi đồng ý với đề xuất thứ hai (Chỉnh sửa 2 ghi chú). –

+0

Đang cố gắng tìm ra điều này cho Windows 10 ... –

+0

Để cập nhật danh sách, trang này hữu ích [Phiên bản Hệ điều hành] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832%28v= vs.85% 29.aspx). – Joseph

3

Nếu bạn không cần phải được cụ thể về R2 của phiên bản máy chủ, một sự thay thế đơn giản là:

enum OS { _2000, XP, Server2003, Vista, Server2008, _7, Server2012, _8 } 

const int OS_ANYSERVER = 29; 

[DllImport("shlwapi.dll", SetLastError = true, EntryPoint = "#437")] 
static extern bool IsOS(int os); 

static bool isWindowsServer = IsOS(OS_ANYSERVER); 

public static OS GetOS() 
{ 
    var version = Environment.OSVersion.Version; 
    switch (version.Major) 
    { 
     case 5: 
      switch (version.Minor) 
      { 
       case 0: 
        return OS._2000; 
       case 1: 
        return OS.XP; 
       case 2: 
        return isWindowsServer ? OS.Server2003 : OS.XP; 
      } 
      break; 
     case 6: 
      switch (version.Minor) 
      { 
       case 0: 
        return isWindowsServer ? OS.Server2008 : OS.Vista; 
       case 1: 
        return isWindowsServer ? OS.Server2008 : OS._7; 
       case 2: 
        return isWindowsServer ? OS.Server2012 : OS._8; 
      } 
      break; 
    } 

    throw new Exception("Strange OS"); 
} 

sao chép từ here.

Để cụ thể hơn lựa chọn của bạn,

  1. WMI, bạn sẽ phải một số phân tích cú pháp thủ công. Không chắc chắn nếu đặc quyền người dùng sẽ làm tổn thương người dùng không phải quản trị viên.

  2. GetVersionEx như được mô tả trong this answer.

  3. Kiểm tra ProductName tại

    HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ 
    
Các vấn đề liên quan