1 Pluspunkt 0 Minuspunkte
Wie kann ich in C# herausfinden ob das Programm auf einem Windows Client oder Windows Server läuft?
von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Das kannst du mit der Funktion GetVersionEx aus der Windopws API.

using System;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("user32.dll")]
    static extern int GetSystemMetrics(int nIndex);

    const int SM_SERVERR2 = 89; // Gibt 0 zurück, wenn es kein Server ist.

    static void Main()
    {
        if (GetSystemMetrics(SM_SERVERR2) != 0)
        {
            Console.WriteLine("Das System ist ein Windows Server.");
        }
        else
        {
            Console.WriteLine("Das System ist ein Windows Client.");
        }
    }
}
von (1.1k Punkte)  
0 Pluspunkte 0 Minuspunkte

Hier ist ein Beispiel mit GetProductInfo aus kernel32.dll.

using System;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("kernel32.dll")]
    static extern bool GetProductInfo(int dwOSMajorVersion, int dwOSMinorVersion, int dwSpMajorVersion, int dwSpMinorVersion, out int pdwReturnedProductType);

    static void Main()
    {
        int productType;
        GetProductInfo(Environment.OSVersion.Version.Major, Environment.OSVersion.Version.Minor, 0, 0, out productType);

        if (IsServer(productType))
        {
            Console.WriteLine("Das System ist ein Windows Server.");
        }
        else
        {
            Console.WriteLine("Das System ist ein Windows Client.");
        }
    }

    static bool IsServer(int productType)
    {
        // Liste der möglichen Server-Typen
        return productType == 0x0000000A || // Server Standard Edition
               productType == 0x0000000C || // Server Datacenter Edition
               productType == 0x0000000D || // Server Enterprise Edition
               productType == 0x00000027 || // Server Essentials Edition
               productType == 0x00000037;   // Server Datacenter Nano Edition
    }
}
von (1.3k Punkte)