2010-12-14 15 views
14

El reto es determinar si ASP.NET está activado en IIS7 de una manera fiable y correcta.Cómo detectar si ASP.NET está habilitada en IIS 7

Activar/Desactivar se realiza en este caso por entrar en:

Server Manager -> 
    Roles -> 
     Web Server (IIS) -> 
      Remove Role Services -> 
       Remove ASP.NET 

El lugar natural para determinar esto debe estar dentro del archivo applicationHost.config. Sin embargo, con ASP.NET habilitado o deshabilitado, todavía tenemos el módulo "ManagedEngine" disponible, y todavía tenemos el registro de filtro isapi en la etiqueta.

Lo mejor que puedo encontrar en este momento es comprobar si la etiqueta <isapiCgiRestriction> incluye aspnet_isapi.dll, o si el proveedor de rastreo de ASPNET está disponible.

Sin embargo estos no están detectando la presencia de la config ASP.NET directamente, sólo un efecto secundario que posiblemente podría ser reconfigurado por el usuario.

Prefiero hacer esto examinando la configuración/configuración de IIS en lugar del propio sistema operativo, si es posible, aunque puede ser aceptable enumerar los Servicios & en el servidor si podemos garantizar que esta técnica siempre funcionará cuando IIS7 es usado.

actualización

Gracias por las respuestas. Para aclarar exactamente qué es lo que quiero hacer, transfiero ajustes de una variedad de lugares en la configuración del servidor a una única vista (solo lectura) para mostrar lo que el usuario debe haber configurado para permitir que el software funcione.

Uno de los ajustes que necesitan traer es éste: IIS Config showing ASP.NET not installed

El resaltado en rojo.

No necesito manipular la configuración, simplemente reproducirla. Quiero ver si el usuario marcó el cuadro de ASP.NET cuando agregaron el rol de IIS al servidor, como en este ejemplo, claramente no lo hicieron.

Me gustaría hacerlo mirando algo confiable en IIS en lugar de enumerar los servicios de función porque no quiero agregar dependencias específicas de la plataforma en la comprobación que no necesito. No sé si alguna vez será posible instalar IIS7 en un servidor que no tenga la infraestructura Roles/Servicios, pero prefiero no preocuparme por ello. También tengo muchas bibliotecas para depurar IIS.

Sin embargo, también tengo problemas para encontrar la manera de enumerar los Roles/Servicios, así que si hay una solución que implique hacer eso, sin duda sería útil, y mucho mejor que comprobar el efecto secundario de tener el proveedor de seguimiento ASPNET por ahí.

Desafortunadamente, si no marca el botón ASP.NET, aún puede obtener el módulo ManagedEngine en el archivo IIS applicationHost.config, por lo que no es una verificación confiable. También puede hacer que ASP.NET se mapee como un filtro isapi, por lo que no es suficiente verificarlos. Estas cosas son especialmente problemáticas en el caso de que se haya instalado ASP.NET pero se haya eliminado.

Parece que la mejor solución sería examinar los Servicios de roles. Sin embargo, la información API sobre esto se ve bastante rara, de ahí el grito de ayuda.

+0

¿Se trata de una aplicación de formularios de consola/Windows o de una aplicación IIS? ¿Te refieres a un sitio específico o simplemente en general? – Kev

+0

La detección proviene de una aplicación de winforms. –

+0

La detección debe hacerse en general. Básicamente, si se elimina el servicio de rol ASP.NET, que es una configuración de todo el servidor, busco una manera confiable de detectar esa condición. –

Respuesta

14

La manera más favorable para saber si se comprueba que es o no para buscar la siguiente clave del registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components 

Allí verá que hay dos valores establecidos a 1, ASPNET y NetFxEnvironment y NetFxExtensibility. Esta clave de registro es la clave de instalación de IIS que contiene todos los componentes que se han habilitado en IIS.

+0

Ese es el perfecto, ¡gracias! –

0

¿Así que quieres la manera fácil? Haz un lindo bonitopágina aspx que se muestra como HTML con un bloque de error en un div en un marcador de posición que dice "Necesita instalar ASP.NET" y hacer que cambie en ASP.NET que se está instalando para decir "ASP.NET está instalado" y luego simplemente tener la herramienta inicia esta página web en el navegador predeterminado después de copiarla en el directorio identificado en IIS como el sitio *: 80 (o crea el mapeo de directorios en IIS mediante programación alterando el XML y luego eliminándolo más adelante)

Puede no ser el más elegante, pero asegura que las pruebas muestren qué características están realmente instaladas frente a las que están en un archivo XML.


Debido a que va a gritar "hacerlo de la manera perezosa ignorantes" les recuerdo que la única manera para que sepa lo que en javascript características que puedo usar es para probarlos antes de tratar de utilizarlos, o supongamos que están allí y miren cómo explotan. Mi punto es que no importa lo que se informa en un archivo, importa lo que realmente se puede usar. El hecho de que C: \ Windows \ Micrsoft.Net \ Framework \ v3.xxxxxxxx exista y tenga archivos no significa que los dll estén registrados en el GAC, ¿o sí?

+0

No estoy interesado en esto. Realmente estoy buscando una prueba específica de "este componente falta" en lugar de establecer una verificación de extremo a extremo, programáticamente, en segundo plano, sin preguntar al usuario, trabajando correctamente todas las direcciones URL necesarias, etc. Instalaciones corruptas son definitivamente un problema, pero estoy mucho más interesado en buscar componentes faltantes. Para mis propósitos, verificar si la carpeta .net3 existe es más que suficiente. –

+0

Bueno, como dije, esa era la manera fácil y perezosa. ¿Has intentado hacer una instantánea de la aplicación Host.config antes y después de instalar ASP.NET en una máquina limpia en una máquina virtual? – jcolebrand

+0

Sí, he hecho una diferencia entre los dos archivos de configuración y lo único que es confiable son las dos configuraciones mencionadas en la pregunta. He actualizado la pregunta con detalles más específicos. –

2

Determinar si asp.net es incluso una característica instalada (requisito previo para habilitarlo) se puede hacer a través de PowerShell, lo que implica que hay .net api disponible para ello si cava lo suficiente. Los métodos de PowerShell:

Import-Module servermanager 
Get-WindowsFeature web-asp-net 

que devolverá un objeto del tipo Microsoft.Windows.ServerManager.Commands.Feature. La propiedad installed es booleana e indica si la característica está instalada o no.

+0

¿alguien sabe cómo reflejar eso o conseguir el ensamblaje para reflejar? Además, parece que ir a SF fue una buena idea. – jcolebrand

Cuestiones relacionadas