2012-04-13 21 views
19

No pude encontrar nada realmente eficiente para detectar correctamente qué plataforma (Windows/Linux/Mac) se estaba ejecutando mi programa C#, especialmente en Mac que devuelve Unix y no puede ¡Difícilmente ser diferenciado con las plataformas Linux!Cómo detectar adecuadamente los sistemas operativos Windows, Linux y Mac

Así que hice algo menos teórico, y más práctico, basado en las especificidades de Mac.

Estoy publicando el código de trabajo como una respuesta. Comente si también funciona bien para usted/puede mejorarse.

Gracias!

Respuesta:

Aquí está el código de trabajo!

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; 
     } 
    } 
+0

Bueno voy a publicar la respuesta en 8 horas cuando voy a estar autorizado a hacerlo :) – virrea

+3

Si ha código de trabajo, editar tu pregunta e incluirla en la pregunta. –

+0

Sí, es lo que estaba haciendo :) ¿Por qué? – virrea

Respuesta

6

Tal revisar el método IsRunningOnMac en la fuente Pinta:

+1

Gracias, parece usar p/invoke. ¿Funcionará todo el tiempo o hay posibilidades de que Mono se queje de eso? – virrea

Cuestiones relacionadas