PDA

Ver la Versión Completa : Saber si se esta ejecutando windows o linux


vivamotos
27-06-2011, 10:55:13
Buenos días,

Tengo el problema en directorios cuando ejecuto mi .exe, hecho en c++ builder, en Linux.

Es por eso, que quisiera saber como puedo saber si estoy en linux o en windows a traves de alguna función o algo, para controlar los paths de una forma u otra.

Grácias.

Casimiro Notevi
27-06-2011, 11:15:17
¿Un exe hecho en c++builder en linux?

vivamotos
27-06-2011, 12:07:56
Si un .exe hecho en c++ builder en windows y luego ejecutado en linux con wine.

Casimiro Notevi
27-06-2011, 12:49:14
Supongo, y repito lo de supongo, que si estás ejecutando el programa desde wine entonces estará "aislado" del entorno y no sabrá que se está ejecutando realmente en un linux.

Ñuño Martínez
27-06-2011, 13:26:47
Supongo, y repito lo de supongo, que si estás ejecutando el programa desde wine entonces estará "aislado" del entorno y no sabrá que se está ejecutando realmente en un linux.
Sí y no. En realidad es posible saber si está ejecutando en Wine+Linux. Incluso es posible saber si está ejecutando en un Windows instalado en una máquina virtual. Casi todos los sistemas operativos incluyen métodos para obtener información del sistema en el que se están ejecutando: microprocesador, memoria, discos, etc., así como la versión del sistema operativo. Al preguntarle a Wine este responde "Wine + Linux" (no conozco la respuesta exacta, pero se me entiende ;)). Claro que se puede configurar Wine para que engañe al sistema y le diga que es un Windows (en el peor de los casos, modificas el código fuente de Wine, recompilas... :rolleyes:).

De todas formas, no es necesario preguntar en qué sistema se está ejecutando para configurar las rutas de los archivos. En FreePascal existen una serie de funciones que hacen el trabajo por ti, como por ejemplo la función GetTempDir que devuelve la ruta completa al directorio "temporal", o GetUserDir que devuelve la ruta al directorio del usuario (/home/<usuario> en POSIX o C:/Documents and Settings/<usuario> en Windows, etc.) y GetAppConfigFile te devuelve la ruta completa a un "archivo de configuración por defecto" para tu aplicación (/home/<usuario>/.config/<aplicacion>.cfg en POSIX, etc). No estoy seguro, pero posiblemente Delphi y Builder también tenga funciones similares, y si no existen deberíais exigir a CodeGears que las implementen, máxime cuando quieren que sus compiladores generen ejecutables para MacOS y Linux.

En el peor de los casos, basta con comprobar las variables de entorno o el registro de Windows, que sé de buena tinta que existen en Windows. Además, hacerlo así hará que tu aplicación se adapte a la configuración personalizada, ya que hay gente que cambia las rutas de los directorios del sistema por conveniencia, por ejemplo poner el directorio "Documents and settings" en otra partición o disco de forma que si tienen que reinstalar el sistema dicha información (documentos, configuraciones, etc.) no se pierda.