2009-07-03 12 views
28

Qualcuno ha un metodo antiproiettile (in C# idealmente!) Per determinare se ASP.Net è correttamente registrato sul computer?Determinare se ASP.Net è registrato correttamente

Sto scrivendo un programma di installazione per un'applicazione ASP.Net e ho bisogno di sapere se dovrei eseguire aspnet_regiis.

Al momento eseguiamo sempre aspnet_regiis - I per garantire che ASP.Net sia registrato correttamente ma questo non è consigliabile perché richiede un riavvio di tutti i pool di applicazioni. Ci sono diverse pagine utili sul web (es. http://www.codeproject.com/KB/cs/iisdetection.aspx) ma come i commenti in quel post show, è abbastanza spesso il caso in cui il registro riporta che ASP.Net è registrato ma aspnet_regiis deve ancora essere eseguito per configurare IIS. L'utente "JonB" ha pubblicato qualcosa che dovrebbe funzionare per IIS6 (e IIS7 con compatibilità IIS6 abilitata), ma avrei comunque bisogno di scrivere codice di rilevamento separato per IIS 7 con la modalità di compatibilità IIS6 disabilitata.

Quindi qualcuno ha già provato questo dado? Se è così, fatecelo sapere perché sarà un risparmio di tempo. Altrimenti cercherò e la porta la soluzione C++ in C# per IIS6 e IIS7 guarderò esaminare la sezione <isapiCgiRestriction> di applicationHosts.config per

<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" /> 

Ultima domanda ...

Qualcuno sa se le cose sono le stesse/diverso in Windows 7?

risposta

10

Prima vorrei provare a eseguire aspnet_regiis -lv. Questo dovrebbe dare un output come:

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 

che si può facilmente analizzare per verificare che la versione di destinazione è installato e valida. In caso contrario, dovrai percorrere il percorso aspnet_regiis -i.

Inoltre, dato che è possibile eseguire questo controllo in C#, è possibile aggiungere una pagina di test all'applicazione ASP.NET. Dopo ciò che normalmente considereresti un'installazione riuscita, fai un HttpWebRequest in quella pagina di test. La pagina stessa può essere semplice come una pagina vuota e complicata come eseguire un autocontrollo dell'installazione (autorizzazioni file/cartella, configurazione DB, ecc.) E restituirebbe solo un HTTP 200 se tutto è ok. Qualsiasi timeout o errore indica un'installazione errata. Quindi, facoltativamente, elimina la pagina di test.

0

Questo frammento funziona per 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 
} 
... 

È possibile regolare come si vuole.

Problemi correlati