什么是最好的确定使用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; }
以下应该工作。 但你为什么在乎呢? 仅仅是为了提供信息的目的,或者你正在寻找目标平台上的实际功能?
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"); }
从这里复制。
更具体的你的选择是,
WMI,你将不得不手动解析。 不知道用户权限是否会伤害非管理员用户。
GetVersionEx如本答案中所述 。
检查ProductName
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
if(Environment.OSVersion.Version.Major > 5) { /* vista and above */ }