2009-02-27 6 views
9

J'ai récemment demandé if you can detect from the application if .NET is installed (de sorte que l'application ne plante pas avec une erreur d'exception générale).Comment échouer gracieusement si .NET n'est pas installé?

La réponse semble être un «non» clair. Je veux toujours être en mesure de quitter gracieusement si .NET n'est pas installé, est-il possible de le faire? Gardez à l'esprit que je ne veux pas changer le nom de l'exécutable, ce qui signifie qu'il est acceptable d'avoir un exécutable non géré en train de faire la vérification et une DLL en ayant le vrai programme .NET mais sans avoir à exécuter des exécutables.

Editer: Je ne veux pas dire que l'installateur ne fonctionne pas, il n'y a pas d'installateur du tout, juste l'exécutable. Bien sûr, il est très improbable que cela se produise, mais j'aimerais quand même pouvoir le vérifier de toute façon.

+4

Pourquoi ne pas utiliser un installateur? Alors ce problème disparaît. –

Répondre

3

Vous avez deux options différentes:

  • écrire un petit chargeur de code natif qui vérifie l'exécution et exécute votre logiciel si le moteur d'exécution est installé. Dans le cas contraire, il pourrait tout simplement donner l'utilisateur un message d'erreur, le pointer vers l'emplacement de téléchargement pour le moteur d'exécution, etc.

OU

  • Assurez-vous que votre programme d'installation installe le moteur d'exécution. Joe Coehorn a mentionné qu'il serait facile de faire avec MSI dans this post et vous devriez également être en mesure de le faire avec d'autres installateurs tels que InnoSetup. Bien sûr, si quelqu'un installe d'abord votre logiciel, puis réinstalle Windows, puis essaie d'exécuter votre application sans la réinstaller, il va planter.

Et bien sûr, vous pouvez combiner les deux pour le meilleur des deux mondes.

-2

Présentez simplement une belle boîte de message qui n'est pas installée et proposez de la télécharger. La plupart des installateurs vous permettront de le faire quand même.

+0

Oui, mais comment puis-je faire cela sans le framework .NET en premier lieu? –

+1

Si vous créez un programme d'installation en utilisant VS200 *, il le fera pour vous. –

0

Vous pouvez écrire une application native qui vérifiera l'existence de l'extension .Net. Ensuite, vous devrez charger la DLL gérée en utilisant LoadLibrary et appeler une fonction à l'intérieur (GetProcAddress) qui va démarrer votre application .Net.

Je suppose que vous aurez également besoin de jouer avec la DLL .Net pour rendre votre fonction principale visible et appelable à partir du code non managé. Il s'appelle PInvoke inverse.

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

0

Qu'est-ce que vous pouvez faire est d'écrire votre code de détection .NET dans natif Win32 C/C++, il ne la détection, affiche un certain utilisateur un message d'erreur convivial ou tout ce que vous entendez par tomber grâce ou appelle le .NET dll s'il existe un cadre approprié disponible. Si vous ne voulez pas avoir deux exécutables, il suffit de stocker les octets de la DLL dans votre exécutable natif et de le charger dynamiquement.

Notez que cette approche rend complètement impossible l'exécution de votre application avec Mono.

+0

Pourquoi est-ce que cela rendrait impossible l'exécution de l'application avec Mono? Ne pouvait-il pas écrire des chargeurs de code natif pour d'autres plateformes et Mono? –

+0

Ah, eh bien, je pourrais deviner ... –

Questions connexes