使用System.Environment.OSVersion
命名空间
我需要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;
}
答案 0 :(得分:17)
以下内容应该有效。但你为什么关心?仅用于记录日志中的信息目的,还是在寻找目标平台上存在的实际功能?
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
}
答案 1 :(得分:10)
不完整列表,但是从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 | +--------------------------------------------------------------+
编辑:注意,如果应用程序在兼容模式下运行,System.Environment.OSVersion返回的信息可能不可靠。
Edit2:我建议您在应用程序中将其设置为可配置值 - 这样,当新的操作系统出现时,您的代码不需要重新编译,例如Windows 7.
答案 2 :(得分:3)
如果您不必具体了解服务器版本的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");
}
从here复制。
更具体地说,您的选择是,
WMI,您将需要进行一些手动解析。不确定用户权限是否会伤害非管理员用户。
在
处检查ProductName
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
答案 3 :(得分:2)
if(Environment.OSVersion.Version.Major > 5) { /* vista and above */ }