Home > GNU/Linux, Guide pratiche GNU/Linux > Usare Mono per eseguire applicazioni .Net per Windows

Usare Mono per eseguire applicazioni .Net per Windows

L’idea di .Net deriva da quella di Java: compilare il programma in un codice (bytecode) da far eseguire da una virtual machine, diciamo da un interprete. Lo slogan di Java è infatti: scrivi una volta, esegui ovunque. Basta avere una virtual machine per ogni sistema operativo.

Mono è la virtual machine .Net per GNU/Linux e in generale per i sistemi Unix. Perché allora non provare ad eseguire una applicazione .Net sviluppata su Windows con Mono su GNU/Linux? Molto più efficiente di Wine.

La domanda è: si può fare? (nessun riferimento a Veltroni, sia chiaro!)

La risposta è: , a patto di avere le giuste librerie e di prendersi qualche fastidio, sapendo che Mono implementa .Net 2.0 e non le versioni successive.

Per prima cosa abbiamo bisogno delle librerie Winforms, ovvero il toolkit grafico di Windows, ma ovviamente per Mono. Nulla di più semplice:

sudo apt-get install libmono-winforms2.0-cil

Queste sono le famose librerie coperte da brevetti di Microsoft. Ma noi ce ne freghiamo perché in Europa i brevetti non valgono.

Per alcuni programmi abbiamo bisogno anche di altre librerie che emulano i runtime di Visual C, Visual Basic for Application e JScript:

sudo apt-get install libmono-microsoft8.0-cil

Per le applicazioni .Net 1.0 invece ci serviremo dei pacchetti libmono-winforms1.0-cil e libmono-microsoft7.0-cil. Ma ormai è raro trovarne.

La maggior parte dei programmi Windows viene di solito distribuita con degli installatori .exe. Non è questo che ci interessa. A noi serve davvero l’eseguibile del programma, non l’installatore. Abbiamo quindi bisogno di un software che scompatti il nostro exe-installatore in modo da avere l’exe-programma. Questo software è cabextract e lo troviamo anch’esso nei repository.

sudo apt-get install cabextract

Ora passiamo ad un esempio pratico. Rispondendo ad un post sul forum di Ubuntu ho trovato una applicazione nel formato .msi (Microsoft Installer), praticamente l’equivalente dei pacchetti .deb o .rpm, ma il discorso è il medesimo che per i .exe.

L’applicazione la trovate qui: http://followtheheard.blogspot.com/2008/05/swiftword-application.html e il file da scaricare è questo.

Create una cartella nella vostra home, ad esempio chiamatela “Swiftword”.

Scaricatelo e mettetelo nella cartella appena creata nella vostra cartella home.

Ora date:

cd Swiftword
cabextract Swiftword1.0.msi

Da notare che se state trattando un .exe l’estrazione potete farla con il normale gestore archivi (file-roller). Nel caso del formato .msi invece file-roller si rifiuta di aprirlo. Ma in realtà basta rinominarlo come .exe😉. Dentro ci troverete un file chiamato disk1.cab che a sua volta conterrà il Swiftword.exe. Ma si fa prima da terminale.

Il risultato sarà:

Extracting cabinet: Swiftword1.0.msi
extracting Swiftword.exe
extracting Swiftword.exe.config

All done, no errors.

Bene, il nostro eseguibile è proprio Swiftword.exe. Quindi diamo:

mono Swiftword.exe

E vedremo la nostra applicazione .Net in tutto il bruttore delle Winforms😉

Swiftword su Mono

Che dire: sì, sembra un Frankenstein. L’aspetto delle Winforms è pessimo, ma in fondo che ci interessa? Non è che ogni giorno usiamo applicazioni .Net. L’importante è che funzioni e, comunque, meglio così che con Wine, dove avreste dovuto installare pure .Net.

C’è una marea di software .Net open source. Questo non lo è, ma ho scritto un post all’autore. Magari si convince e lo libera.

Piccola curiosità. Ma i .exe fatti con Mono, quelli proprio per GNU/Linux, sono degli eseguibili Windows? La risposta è sì, sono nello stesso formato.

guido@guido-laptop:~/Scrivania$ file /usr/lib/tomboy/Tomboy.exe
/usr/lib/tomboy/Tomboy.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit Mono/.Net assembly

  1. Trap
    8 luglio 2009 alle 10:42

    Interessante! Quindi la compatibilità con .NET 2.0 è garantitA?

  2. 8 luglio 2009 alle 10:51

    Dimenticavo…
    Quella apgina si riferisce alla versione attuale, che ora che scrivo è la 2.4.1…
    Mentre ad esempio su ubuntu jaunty c’è la 2.0…

  3. learc
    8 luglio 2009 alle 11:55

    ciao. innanzi tutto complimenti per il blog: guide eccellenti e ottime spiegazioni. in oltre la pensiamo allo stesso modo sul software, quindi🙂 ti scrivo perchè vorrei chiederti se è possibile eseguire windows live messenger in mono (non ho trovato se è .net). a me wlm non interessa affatto, però troverei la sua esecuzione su gnu/linux e unix in generale una ottima cosa, in quanto è (purtroppo) il protocollo chat più diffuso in italia. riterrei la sua esecuzione una cosa interessante in quanto potrebbe convertire molti utenti windows a ubuntu, in quanto molti non lo abbandonano perchè:
    -o credono che la chat di msn non funzioni su gnu/linux
    -o perchè (giustamente) ritengono orribili i client disponibili
    quindi, in soldoni, ti chiedo gentilmente se potresti testare la sua compattibilità. se quest’ultimo sarà compattibile, sarebbe una buona idea creare uno script in bash che faccia tutti i procedimenti di installazione in maniera automatica, giusto per facilitare la vita ai niubbi.
    quanto ti domando lo potrei fare io, ma purtroppo non dispongo di abbastanza tempo per svolgere questo.
    grazie del tempo che hai dedicato alla lettura di questo lungo commento. ciao (e complimenti ancora)😀

    • 8 luglio 2009 alle 13:47

      Non penso si possa fare – non con mono comunque – e in ogni caso non lo farei.
      Ci sono ottimi client per GNU/Linux come emesene crazy che ho testato oggi con tanto di webcam, va a meraviglia, meglio di wlm.

  4. 9 luglio 2009 alle 9:53

    Ottimo! Proverò il programma che uso per la gestione degli allenamenti! Vi farò sapere …🙂

    • frer
      21 luglio 2009 alle 15:29

      quale programma? facci sapere eh, son passate due settimane!!

  5. 21 luglio 2009 alle 15:38

    Hai ragione … sono state due settimane molto complicate sia da un punto di vista lavorativo che personale … proverò il tutto prima possibile … promesso🙂

  6. 15 settembre 2013 alle 1:02

    always i used tto read smaller posts that as well clear their motive, and that is also happening with this post which I am reading
    here.

  7. 30 luglio 2014 alle 14:05

    Very soon this site will be famous amid all blog
    users, due to it’s pleasant posts

  8. 2 ottobre 2014 alle 10:04

    Greetings! I know this is kind of off topic but I was wondering if you knew where I could find
    a captcha plugin for my comment form? I’m using the same blog platform as yours and I’m having difficulty finding one?
    Thanks a lot!

  9. 9 ottobre 2014 alle 8:33

    This is very fascinating, You are an excessively professional blogger.

    I have joined your feed and stay up for searching for more of your magnificent post.

    Also, I have shared your website in my social networks

  10. 26 ottobre 2014 alle 1:15

    I take pleasure in, result in I discovered
    exactly what I was taking a look for. You’ve ended my 4 day
    lengthy hunt! God Bless you man. Have a great day.
    Bye

  1. 20 settembre 2014 alle 12:11
  2. 23 ottobre 2014 alle 19:02
  3. 23 ottobre 2014 alle 23:33
  4. 24 ottobre 2014 alle 7:04

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: