Wie zu erkennen, richtig Windows, Linux & Mac-Betriebssysteme

Könnte ich nicht gefunden, was wirklich effizient zu erkennen, korrekt auf welcher Plattform (Windows /Linux /Mac) - mein C# - progrma wurde ausgeführt, vor allem auf dem Mac, die gibt Unix-und kann es kaum sein, welcher mit Linux-Plattformen !

Also machte ich etwas weniger theoretisch und mehr praktisch, basierend auf Besonderheiten von Mac.

Bin ich Entsendung den funktionierenden code als Antwort. Bitte kommentieren, wenn es gut funktioniert für Sie zu /verbessert werden kann.

Dank !

Antwort :

Hier ist der funktionierende code !

    public enum Platform
    {
        Windows,
        Linux,
        Mac
    }

    public static Platform RunningPlatform()
    {
        switch (Environment.OSVersion.Platform)
        {
            case PlatformID.Unix:
                //Well, there are chances MacOSX is reported as Unix instead of MacOSX.
                //Instead of platform check, we'll do a feature checks (Mac specific root folders)
                if (Directory.Exists("/Applications")
                    & Directory.Exists("/System")
                    & Directory.Exists("/Users")
                    & Directory.Exists("/Volumes"))
                    return Platform.Mac;
                else
                    return Platform.Linux;

            case PlatformID.MacOSX:
                return Platform.Mac;

            default:
                return Platform.Windows;
        }
    }
  • Naja ich poste die Antwort in 8 Stunden, wenn ich werde dies tun dürfen 🙂
  • Wenn Sie funktionierenden code, Bearbeiten Sie Ihre Frage und in die Frage.
  • Ja, es ist was ich tun 🙂 Warum -1 ?
  • Ich würde das nicht als eine komplette Gehäuse, was zum Beispiel, wenn mein linux konfiguriert worden sind, die mit allen diesen Verzeichnissen...wäre nicht unmöglich...
  • In der Tat, wenn diese Verzeichnisse wurden auf einem Linux zu installieren, es würde gemeldet werden, als Mac, aber ich hatte einen workaround finden, um das mono-problem, dass ziemlich nie Berichte PlatformID.MacOSX aber PlatformID.Unix-gleichgültig auf Linux und Mac. Denken Sie an ein Weg, um besser zu erkennen, es ?
  • Ich hasse es, necro lange-tot-Frage, aber gibt es eine ziemlich einfache Lösung für dieses Problem. Jedes Unix-basierte os standardmäßig enthält die uname Befehl. Wenn das Ergebnis der code oben gibt Platform.Unix könnte man beginnen, ein Teilprozess ausgeführt uname -o, die Ergebnisse filtern auf, ob Sie enthalten linux oder darwin, und dann wieder die entsprechenden enum-Wert entsprechend.

InformationsquelleAutor virrea | 2012-04-13
Schreibe einen Kommentar