Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Determining if the program is running on Windows Server

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).

I know that I can use SystemInformation.TerminalServerSession to check whether my program is running on a Remote Desktop (see also this question), 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.

like image 897
Pierre Arnaud Avatar asked Jun 29 '10 06:06

Pierre Arnaud


People also ask

How do I see what processes are running on Windows Server?

Step 1: Log in to your server through a Remote Desktop connection. Step 2: Hold Ctrl+Shift+Esc or right-click on the Windows bar, and choose Start Task Manager. Step 3: In Windows Task Manager, click on More details. Step 4: The Processes tab displays all running processes and their current resources usage.

How do I run a health check on a Windows server?

To get the Health Monitor summary report, go to the Server Administration Panel > Home > Server Health. Note that the summary report shows you instantaneous parameters values that are relevant only for the moment when the Home page was refreshed.


1 Answers

Thanks to pointers provided by Nick's answer, I've finally found what I was looking for. The function IsOS(OS_ANYSERVER) does exactly what I need. Here is the sample code which should work for any OS version (including pre-Vista, since we import the IsOS function by ordinal from 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);
}
like image 157
Pierre Arnaud Avatar answered Oct 05 '22 12:10

Pierre Arnaud