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 gibtPlatform.Unix
könnte man beginnen, ein Teilprozess ausgeführtuname -o
, die Ergebnisse filtern auf, ob Sie enthaltenlinux
oderdarwin
, und dann wieder die entsprechenden enum-Wert entsprechend.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht überprüfen Sie heraus die IsRunningOnMac Methode in der Pinta Quelle:
Pro die Anmerkungen auf den Umwelt.Die Eigenschaft OSVersion Seite:
RuntimeInformation.IsOSPlatform gearbeitet für das, was ich brauchte.