route - Determinar si ASP.Net está correctamente registrado
select asp-for asp-items (2)
¿Alguien tiene un método a prueba de balas (en C # idealmente!) Para determinar si ASP.Net está registrado correctamente en su computadora?
Estoy escribiendo un programa de instalación para una aplicación ASP.Net y necesito saber si debo ejecutar aspnet_regiis
.
En este momento, siempre ejecutamos aspnet_regiis
-I para asegurarnos de que ASP.Net se registre correctamente, pero esto no es deseable 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, es muy frecuente que el registro informe que ASP. La red está registrada pero aspnet_regiis
aún debe ejecutarse para configurar IIS. El usuario ''JonB'' publicó algo que parece que debería funcionar para IIS6 (e IIS7 con la compatibilidad con IIS6 habilitada) pero aún tendría que escribir un código de detección separado para IIS 7 con el modo de compatibilidad con IIS6 deshabilitado.
¿Alguien ya ha roto esta tuerca? Si es así, avísenos, ya que será un ahorro de tiempo. De lo contrario, intentaré portar la solución de C ++ en C # para IIS6 y para IIS7 buscaré en la sección <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 iguales o diferentes en Windows 7?
Este fragmento 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
}
...
Puedes ajustarlo como quieras.
Primero intentaría ejecutar aspnet_regiis -lv
. Esto debería 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 puede analizar fácilmente para verificar que su versión de destino está instalada y es válida. Si no lo es, tendrás que ir por 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 una HttpWebRequest
en esa página de prueba. La página en sí puede ser tan simple como una página vacía y tan complicada como ejecutar una autocomprobació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, eliminar la página de prueba.