使用Environment.OSVersion确定操作系统

什么是最好的确定使用System.Environment.OSVersion命名空间托pipe您的ASP.NET应用程序的Microsoft操作系统

我需要一个Windows XP,Windows Server 2003和Windows Vista的例子

这是我正在尝试使用伪代码来完成的

 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; } 

Solutions Collecting From Web of "使用Environment.OSVersion确定操作系统"

以下应该工作。 但你为什么在乎呢? 仅仅是为了提供信息的目的,或者你正在寻找目标平台上的实际功能?

 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 } 

不是一个完整的列表,但从http://support.microsoft.com/kb/304283得到这个:

 + ------------------------------------------------- ------------- +
 |  | Windows | Windows | Windows | Windows NT | Windows | Windows |
 |  |  95 |  98 | 我| |  4.0 |  2000 |  XP |
 + ------------------------------------------------- ------------- +
 | PlatformID |  1 |  1 |  1 |  2 |  2 |  2 |
 + ------------------------------------------------- ------------- +
 | Major |  |  |  |  |  |  |
 | 版本|  4 |  4 |  4 |  4 |  5 |  5 |
 + ------------------------------------------------- ------------- +
 |次要|  |  |  |  |  |  |
 | 版本|  0 |  10 |  90 |  0 |  0 |  1 |
 + ------------------------------------------------- ------------- +

编辑:请注意,如果应用程序以兼容模式运行,System.Environment.OSVersion返回的信息可能不可靠。

编辑2:我建议你在应用程序中使它成为一个可配置的值 – 这样,当新的操作系统出现时,你的代码不需要重新编译,例如Windows 7。

如果您不必具体说明服务器版本的R2,则更简单的选择是:

 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"); } 

从这里复制。

更具体的你的选择是,

  1. WMI,你将不得不手动解析。 不知道用户权限是否会伤害非管理员用户。

  2. GetVersionEx如本答案中所述 。

  3. 检查ProductName

     HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ 
 if(Environment.OSVersion.Version.Major > 5) { /* vista and above */ }