2009-07-03 17 views
28

Hat jemand eine kugelsichere Methode (in C# im Idealfall!) Zu bestimmen, ob ASP.Net ordnungsgemäß auf Ihrem Computer registriert ist?Ermitteln, ob ASP.Net korrekt registriert ist

Ich schreibe ein Installationsprogramm für eine ASP.Net-Anwendung und ich muss wissen, ob ich aspnet_regiis ausführen soll.

Im Moment führen wir immer aspnet_regiis - I, um sicherzustellen, dass ASP.Net ordnungsgemäß registriert ist, aber dies ist unerwünscht, da es einen Neustart aller Anwendungspools auffordert.

Es gibt mehrere nützliche Seiten im Internet (zB http://www.codeproject.com/KB/cs/iisdetection.aspx), aber wie die Kommentare in diesem Post zeigen, ist es oft der Fall, dass die Registry meldet, dass ASP.Net registriert ist, aber aspnet_regiis noch ausgeführt werden muss, um zu konfigurieren IIS. Der Benutzer "JonB" hat etwas gepostet, das für IIS6 funktioniert (und IIS7 mit aktivierter IIS6-Kompatibilität), aber ich müsste weiterhin separaten Erkennungscode für IIS 7 schreiben, wenn der IIS6-Kompatibilitätsmodus deaktiviert ist.

Hat also schon jemand diese Nuss geknackt? Wenn ja, lassen Sie es uns bitte wissen, denn das spart Zeit. Ansonsten werde ich versuchen und Port der C++ Lösung in C# für IIS6 und IIS7 werde ich den <isapiCgiRestriction> Abschnitt applicationHosts.config für

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

Letzte Frage aussehen prüfen ...

Wer weiß, wenn die Dinge gleich sind/anders in Windows 7?

Antwort

10

Zuerst würde ich versuchen, aspnet_regiis -lv zu laufen. Dies sollte Ihnen eine Ausgabe wie:

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 

, die Sie leicht analysieren kann, um zu überprüfen, dass Ihre Zielversion installiert ist und gültig. Wenn nicht, müssen Sie die Route aspnet_regiis -i gehen.

Da Sie diese Überprüfung in C# durchführen können, können Sie auch eine Testseite zu Ihrer ASP.NET-Anwendung hinzufügen. Nach was Sie normalerweise eine erfolgreiche Installation betrachten würden, machen Sie eine HttpWebRequest auf dieser Testseite. Die Seite selbst kann so einfach sein wie eine leere Seite und so kompliziert wie das Ausführen einer Selbstüberprüfung der Installation (Datei-/Ordnerberechtigungen, Datenbankkonfiguration usw.) und würde nur HTTP 200 zurückgeben, wenn alles in Ordnung ist. Jede Zeitüberschreitung oder ein Fehler weist auf eine fehlerhafte Installation hin. Löschen Sie dann optional die Testseite.

0

Dieser Code-Schnipsel funktioniert für 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 
} 
... 

Sie können einstellen, wie Sie wollen.

Verwandte Themen