C# 使用Environment.OSVersion确定操作系统
使用C# 使用Environment.OSVersion确定操作系统,c#,asp.net,windows,C#,Asp.net,Windows,使用System.Environment.OSVersion命名空间确定承载ASP.NET应用程序的Microsoft OS的最佳方法是什么 我需要一个Windows XP、Windows Server 2003和Windows Vista的示例 下面是我试图使用伪代码实现的内容 switch(/* Condition for determining OS */) { case "WindowsXP": //Do Windows XP stuff brea
System.Environment.OSVersion
命名空间确定承载ASP.NET应用程序的Microsoft OS的最佳方法是什么
我需要一个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;
}
不是一个完整的列表,但从以下来源获得: +--------------------------------------------------------------+ ||窗|窗|窗|窗NT |窗|窗| || 95 | 98 | Me | 4.0 | 2000 | XP| +--------------------------------------------------------------+ |平台状| 1 | 1 | 2 | 2 | 2| +--------------------------------------------------------------+ |少校| |版本| 4 | 4 | 4 | 5 | 5| +--------------------------------------------------------------+ |小调| |版本| 0 | 10 | 90 | 0 | 0 | 1| +--------------------------------------------------------------+ 编辑:注意,如果应用程序在兼容模式下运行,System.Environment.OSVersion返回的信息可能不可靠
Edit2:我建议您在应用程序中设置一个可配置的值,这样在新操作系统(如Windows 7)出现时,您的代码就不需要重新编译 以下方法应该有效。但你为什么在乎?只是为了在日志记录中提供信息,还是您正在寻找目标平台上存在的实际功能
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
}
如果您不必对服务器版本的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");
}
抄袭自
更具体地说,你的选择是
ProductName
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
我需要为每个操作系统版本做不同的事情。我在想一个开关或if/else语句回答错误!它必须是:如果(Environment.OSVersion.Version.Major>6){/*vista及以上版本*/}我需要根据托管我的windows服务的操作系统生成正确的IE用户代理字符串,那么版本主/次编号是否足够?类似这样:Mozilla/4.0(兼容;MSIE 7.0b;Windows NT 6.0)是否有任何方法可以区分XP64和Server 2003?我同意第二个建议(编辑2注释)。尝试在Windows 10中解决这个问题…对于更新列表,此页面非常有用。
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");
}
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\