2009-07-03 11 views
28

¿Alguien tiene un método a prueba de balas (lo ideal es que en C#) determine si ASP.Net está registrado correctamente en su computadora?Determinar si ASP.Net está registrada correctamente

Estoy escribiendo un programa de instalación para una aplicación ASP.Net y necesito saber si debo ejecutar aspnet_regiis.

Por el momento siempre ejecutamos aspnet_regiis - I para asegurarnos de que ASP.Net está registrado correctamente, pero esto es indeseable porque solicita un reinicio de todos los grupos de aplicaciones.

Hay varias páginas útiles en la web (por ejemplo, http://www.codeproject.com/KB/cs/iisdetection.aspx), pero como muestran los comentarios en esa publicación, con bastante frecuencia el registro informa que ASP.Net está registrado pero aspnet_regiis todavía necesita ejecutarse para configurar IIS. El usuario 'JonB' publicó algo que parece que debería funcionar para IIS6 (y IIS7 con la compatibilidad de IIS6 habilitada), pero igual tendría que escribir un código de detección separado para IIS 7 con el modo de compatibilidad IIS6 deshabilitado.

¿Alguien ha roto ya esta tuerca? Si es así, háganos saber, ya que será un ahorro de tiempo. De lo contrario, voy a tratar de puerto de la solución C++ en C# para IIS6 y IIS7 miraré examinar la sección de <isapiCgiRestriction> de applicationHosts.config para

<add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" /> 

última pregunta ...

¿Alguien sabe si las cosas son los mismos/diferente en Windows 7?

Respuesta

10

Primero intentaré ejecutar aspnet_regiis -lv. Esto debe darle una salida como:

1.1.4322.0  Valid   C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll 
2.0.50727.0  Valid   c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll 

que se puede analizar fácilmente para verificar que su versión de destino está instalado y válida. Si no lo es, deberá ir a la ruta aspnet_regiis -i.

Además, dado que puede hacer esta comprobación en C#, podría agregar una página de prueba a su aplicación ASP.NET. Después de lo que normalmente consideraría una instalación exitosa, haga un HttpWebRequest en esa página de prueba. La página en sí misma puede ser tan simple como una página vacía y tan complicada como ejecutar una autoverificación de la instalación (permisos de archivo/carpeta, configuración de base de datos, etc.) y solo devolvería un HTTP 200 si todo está bien. Cualquier tiempo de espera o error indica una mala instalación. Luego, opcionalmente, elimine la página de prueba.

0

Este fragmento de código funciona para IIS7 +

using Microsoft.Web.Administration; 

private static string[] ARR_STR_SUPPORTED_APP_POOLS = 
         { "ASP.NET v4.0", "ASP.NET v4.5", ".NET v4.5", ".NET v4.0" }; 

public static ApplicationPool GetFirstSupportedAppPoolInstalled(this ServerManager mgr, IEnumerable<string> supportedAppPools) 
{ 
    ApplicationPool result = null; 
    foreach (string appPoolName in supportedAppPools) 
    { 
     result = mgr.ApplicationPools[appPoolName]; 
     if (result != null) 
      break; 
    } 
    return result; 
} 

... 
using (var mgr = new ServerManager()) 
{ 
    if (!mgr.IISAccessCheck()) 
     throw new ApplicationException("Error trying to access IIS 7!"); 

    ApplicationPool appPool = mgr.GetFirstSupportedAppPoolInstalled(ARR_STR_SUPPORTED_APP_POOLS); 
    if (appPool == null) 
     throw new ApplicationException("No appropriate .NET application pool found!"); 

    // you can do something with the app pool, if needed 
} 
... 

Se puede ajustar como se desee.

Cuestiones relacionadas