I would like to determine if my program is running on a version of Windows Server. Apparently, `System.Environment` does not contain information about the fact that Windows is a server version (there is no such info in the [OS version object](https://stackoverflow.com/questions/860459/determine-os-using-the-environment-osversion-object-c)).

I know that I can use `SystemInformation.TerminalServerSession` to check whether my program is running on a Remote Desktop (see also [this question](https://stackoverflow.com/questions/159910/determine-if-a-program-is-running-on-a-remote-desktop)), but this will also be true if the user is simply accessing a plain client Windows machine remotely.

So is there a supported way of determining if the code is running on a server or on a client machine? I don't mind using P/Invoke if needed.

Note: I don't want to search for the `"Server"` string in the product name, since this will probably not work on some systems because of the localization.