2009-02-27 13 views
9

Recientemente he preguntado if you can detect from the application if .NET is installed (por lo que la aplicación no se bloqueará con un error de excepción general).¿Cómo fallar correctamente si .NET no está instalado?

La respuesta parece ser un simple "no". Todavía quiero poder salir elegantemente si .NET no está instalado, ¿hay alguna forma de hacerlo?

Tenga en cuenta que no quiero cambiar el nombre del ejecutable, lo que significa que está bien tener un ejecutable no administrado haciendo el chequeo y un archivo dll teniendo el verdadero programa .NET pero sin tener que ejecutarlos.

Editar: No me refiero a fallar en el instalador, no hay ningún instalador, solo el ejecutable. Por supuesto, es muy poco probable que esto suceda, pero aún así me gustaría poder verificarlo de todos modos.

+4

¿Por qué no utilizar un instalador? Entonces este problema desaparece. –

Respuesta

3

tiene dos opciones diferentes:

  • escribir un pequeño cargador de código nativo que comprueba el tiempo de ejecución y ejecuta el software si está instalado el tiempo de ejecución. De lo contrario, simplemente podría dar usuario un mensaje de error, lo que apunte a la ubicación de descarga para el tiempo de ejecución, etc.

O

  • Asegúrese de que el instalador instala el tiempo de ejecución. Joe Coehorn mencionó que sería fácil de hacer con MSI en this post y también debería poder hacerlo con otros instaladores como InnoSetup. Por supuesto, si alguien primero instala su software, luego vuelve a instalar Windows y luego intenta ejecutar su aplicación sin volver a instalarlo, se bloqueará.

Y, por supuesto, puede combinar ambos para lo mejor de ambos mundos.

-2

Simplemente presente un buen cuadro de mensaje que no está instalado y ofrezca descargarlo. La mayoría de los instaladores le permitirán hacer esto de todos modos.

+0

Sí, pero ¿cómo hago eso SIN el framework .NET en primer lugar? –

+1

Si crea un instalador usando VS200 *, lo hará por usted. –

0

Puede escribir una aplicación nativa que verifique la existencia de .Net. A continuación, deberá cargar el dll administrado utilizando LoadLibrary y llamar a una función dentro de él (GetProcAddress) que iniciará la aplicación .Net.

Supongo que también tendrá que meterse con .Net dll para hacer que su función principal sea visible e invocable desde un código no administrado. Se llama PInvoke inverso.

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

0

Lo que puede hacer es escribir el código de detección de .NET en Win32 nativo C/C++, lo hace la detección, muestra algún mensaje de error de uso fácil o lo que quiere decir por la caída de gracia o llama al .NET dll si hay un marco apropiado disponible. Si no desea tener dos ejecutables, simplemente almacene los bytes de la DLL en su ejecutable nativo y cárguelo dinámicamente.

Tenga en cuenta que este enfoque hace que sea completamente imposible ejecutar su aplicación con Mono.

+0

¿Por qué sería imposible ejecutar la aplicación con Mono? ¿No podría escribir cargadores de código nativo para otras plataformas y Mono? –

+0

Ah, bueno, él podría adivinar ... –

Cuestiones relacionadas