2009-02-27 16 views
9

Ho recentemente chiesto if you can detect from the application if .NET is installed (in modo che l'applicazione non si arresti in modo anomalo con un errore di eccezione generale).Come fallire correttamente se .NET non è installato?

La risposta sembra essere un semplice "no". Voglio ancora essere in grado di uscire con garbo se .NET non è installato, c'è un modo per farlo?

Ricordare che non desidero modificare il nome del file eseguibile, vale a dire che è necessario disporre di un file eseguibile non gestito che esegue il controllo e che una DLL esegua il programma .NET ma non esegue eseguibili.

Modifica: Non intendo mancare l'installazione, non c'è alcun programma di installazione, solo l'eseguibile. Ovviamente è altamente improbabile che ciò accada, ma comunque mi piacerebbe poterlo controllare comunque.

+4

Perché non utilizzare un programma di installazione? Quindi questo problema va via. –

risposta

3

Sono disponibili due diverse opzioni:

  • scrivere un piccolo codice del loader nativo che controlla il runtime ed esegue il software se è installato il runtime. In caso contrario, si potrebbe solo dare all'utente un messaggio di errore, lo puntare alla posizione di download per il runtime, ecc

O

  • Assicurarsi che il programma di installazione installa il runtime. Joe Coehorn ha detto che sarebbe stato facile farlo con MSI in this post e dovresti essere in grado di farlo anche con altri programmi di installazione come InnoSetup. Ovviamente, se qualcuno installa prima il software, quindi re-installa Windows, quindi prova a eseguire l'applicazione senza reinstallarla, si bloccherà.

E naturalmente è possibile combinare entrambi per il meglio di entrambi i mondi.

-2

Basta presentare una finestra di messaggio che non è installata e offre di scaricarla. La maggior parte degli installatori ti consentirà comunque di farlo.

+0

Sì, ma come faccio a SENZA il framework .NET in primo luogo? –

+1

Se si crea un programma di installazione utilizzando VS200 * lo farà per voi. –

0

È possibile scrivere un'applicazione nativa che verificherà l'esistenza di .Net. Quindi sarà necessario caricare la DLL gestita utilizzando LoadLibrary e richiamare una funzione al suo interno (GetProcAddress) che avvierà l'applicazione .Net.

Suppongo che sarà necessario anche fare confusione con la DLL .Net per rendere visibile e richiamabile la funzione principale dal codice non gestito. Si chiama inversa PInvoke.

http://www.autohotkey.com/forum/topic20273.html

0

Che cosa si può fare è scrivere il codice di rilevamento NET nella nativa Win32 C/C++, lo fa il rilevamento, viene visualizzato qualche messaggio di errore user friendly o qualsiasi altra cosa si intende per cadere con grazia o chiama il .NET dll se c'è una struttura appropriata disponibile. Se non si desidera avere due file eseguibili, è sufficiente memorizzare i byte della DLL nel file eseguibile nativo e caricarlo in modo dinamico.

Si noti che questo approccio rende assolutamente impossibile eseguire l'applicazione con Mono.

+0

Perché renderebbe impossibile eseguire l'applicazione con Mono? Non potrebbe scrivere caricatori di codice nativi per altre piattaforme e Mono? –

+0

Ah, beh, poteva indovinare ... –

Problemi correlati