Pie*_*aud 12 c# windows-server
我想确定我的程序是否在Windows Server的某个版本上运行.显然,System.Environment不包含有关Windows是服务器版本的事实的信息(OS版本对象中没有此类信息).
我知道我可以SystemInformation.TerminalServerSession用来检查我的程序是否在远程桌面上运行(另请参阅此问题),但如果用户只是远程访问普通客户端Windows机器,情况也是如此.
那么是否有一种支持的方法来确定代码是在服务器上还是在客户端计算机上运行?如果需要,我不介意使用P/Invoke.
注意:我不想"Server"在产品名称中搜索字符串,因为由于本地化,这可能不适用于某些系统.
Pie*_*aud 20
感谢尼克回答提供的指示,我终于找到了我想要的东西.函数IsOS(OS_ANYSERVER)正是我所需要的.以下示例代码适用于任何操作系统版本(包括Vista之前,因为我们IsOS按顺序导入函数shlwapi.dll):
class OS
{
public static bool IsWindowsServer()
{
return OS.IsOS (OS.OS_ANYSERVER);
}
const int OS_ANYSERVER = 29;
[DllImport("shlwapi.dll", SetLastError=true, EntryPoint="#437")]
private static extern bool IsOS(int os);
}
Run Code Online (Sandbox Code Playgroud)
您可以p /调用以下Win32函数:
适用于Windows 2000+的Vista/Windows Server 2008+
GetVersionEx的GetProductInfo
BJ Rollison 在他的博客上有一个很好的帖子和示例代码.