Introducción
Cuando el otro día hablábamos de cómo ejecutar un programa Windows sobre Linux con Wine, nos preguntaron por los programas que están implementados con .NET, que por cierto cada día son más en plataformas Windows.
Desde estas líneas os recuerdo que al igual que Java, .NET es una plataforma pensada para tener un carácter multiplataforma (aunque en la realidad el grado de compatibilidad es mucho menor) por lo que con una máquina virtual que soporte la ejecución de dicho programa a priori no habría problema.
¿Existe un entorno de ejecución de .NET en Linux? Sí que existe, es Software Libre y es uno de los proyectos libres que más me interesan (por suerte o por desgracia trabajo a diario con entornos .NET en mi trabajo). Hablamos del Proyecto Mono y he de deciros que es uno de los proyectos más polémicos de todo el universo libre por razones de cercanía a Microsoft.
Ejecución
Un ejecutable creado con .NET para plataformas de escritorio podemos ejecutarlo directamente desde la consola con la siguiente orden:
$ mono fichero.exe
Tendremos que tener instalado el entorno de ejecución de Mono (normalmente llamado mono-runtime si queréis buscarlo en vuestro gestor de paquetes).
Es muy posible que el instalador del programa que queremos ejecutar no esté implementado en Mono, por lo que habría que seguir dos pasos:
En ese directorio: $HOME/.wine/drive_c tendréis una emulación del disco principal del sistema imitado por Wine.
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
Pues me sale este error, que estuve investigando y no conseguí entender.
Cannot open assembly 'Setup.exe': File does not contain a valid CIL image.
En fin, tampoco es el fin del mundo.
buen post!, saludos.
@nordri: Como comento en el post, lo que te ocurre es que el instalador no está implementado en .NET (CIL es el nombre del pseudo-lenguaje que usa .NET/Mono, podríamos compararlo con el bytecode de Java).
Debes ejecutar el instalador, tratar que te instale el programa (forzándolo a que no compruebe que está instalada la Framework de .NET) y luego ejecutarlo con .NET.
Si quieres engañarlo puedes tratar de extraer del instalador con tar u otro compresor, el programa en sí y ejecutarlo posteriormente con Mono como comento en este artículo.
Ya me contarás cómo te va.
Bien, efectivamente el instalador no era un programa .NET, y con el último Wine se ha ejecutado y ha instalado el software. De echo, esto me decía "file"
nordri@nordri-desktop:~$ file sandbox/Setup.exe
sandbox/Setup.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit
Bueno, se ha instalado, eso ha mejorado con respecto a la última vez que lo probé con Wine, pero "mono" no lo lanza, te pego aquí lo que me dice:
http://pastebin.com/PQEdW5Kc
Un saludo
@nordri: Por lo que veo en el pastebin, te faltan los ensamblados de Visual Basic a los que hace referencia el programa de Hoffman.
Lo más fácil es que pruebes a instalar un paquete que en los repositorios de Ubuntu 10.04 se llama: libmono-microsoft-visualbasic, si no lo encuentras busca: "Visual Basic 2005 runtime libraries for Mono".
Con eso creo que lo tendrás solucionado, porque automáticamente el paquete te lo mete en el GAC que es por así decirlo el coordinador del repositorio de ensamblados del sistema Mono/.NET.
Instalé el soporte para VB como me has comentado y llego a este error
nordri@nordri-desktop:~$ mono .wine/drive_c/Archivos\ de\ programa/Hofmann/Hofmann/program/Hofmann.exe
** Message: Unknown heap type: CLR
Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for ---> System.InvalidProgramException: Invalid IL code in A.c371aab3e1f40fe2ebcd6dcee95f7d0e1:c5f10bc2014e3a32b10cc0f5e08c0bff9 (): IL_0002: stloc.0
at ..cctor () [0x00000]
--- End of inner exception stack trace ---
Según he leido el soporte de VB es bastante reciente, así que espero que en próximas releases funcione.
Muchas gracias
Saludos
@nordri: Esperemos que versiones futuras arreglen el problema. Me alegro al menos de que hayas investigado algo por Mono para ver que muchas aplicaciones de .NET pueden ejecutarse sin problemas en Linux.
¡Un saludo!
Hola por favor ayudame manda tu respuest alo correo lo que pasa que mi aplicacion echa en vs2010 con c# no coje con el wine no se que hacer ya tengo instalado el mono y nada que lo abre el proyecto dice que falta asembladores
@Diego: tienes que buscar los ensamblados que te faltan. Para ello búscalos primero, luego los referencias con el GAC y finalmente los ejecutas con Mono.
Hola gracias, tu pagina me ayudo a arrancar un programa, pero hay algo que no comprendo. Tengo el codigo fuente de un programa .NET, lo compilo con make, luego lo instalo con make install y va a /usr/local/share/programax. Si en terminal voy a ese directorio y ejecuto mono programax si funciona. Pero si en el sistema de ficheros en modo grafico, le digo ejecutar con mono runtime (desde terminal o no es indiferentel), entonces parece que intenta arrancar pero la ventana se cierra al poco tiempo. No consigo entender por que pasa, llevo poco tiempo con linux