webentwicklung-frage-antwort-db.com.de

Feststellen, ob ASP.Net ordnungsgemäß registriert ist

Hat jemand eine kugelsichere Methode (in C # idealerweise!), Um festzustellen, ob ASP.Net ordnungsgemäß auf Ihrem Computer 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 aus, um sicherzustellen, dass ASP.Net ordnungsgemäß registriert wird. Dies ist jedoch unerwünscht, da alle Anwendungspools neu gestartet werden müssen. 

Es gibt mehrere nützliche Seiten im Internet (z. B. http://www.codeproject.com/KB/cs/iisdetection.aspx ), aber wie die Kommentare in diesem Beitrag zeigen, ist es oft der Fall, dass die Registrierung besteht meldet, dass ASP.Net registriert ist, aber aspnet_regiis noch ausgeführt werden muss, um IIS zu konfigurieren. Der Benutzer 'JonB' hat etwas veröffentlicht, das so aussieht, als würde es für IIS6 funktionieren (und IIS7 mit IIS6-Kompatibilität aktiviert), aber ich müsste trotzdem einen separaten Erkennungscode für IIS 7 schreiben, wobei der IIS6-Kompatibilitätsmodus deaktiviert ist.

Hat also schon jemand diese Nuss geknackt? Wenn ja, lass es uns wissen, denn es wird Zeit sparen. Ansonsten werde ich versuchen, die C++ - Lösung in C # für IIS6 zu portieren, und für IIS7 werde ich den Abschnitt <isapiCgiRestriction> von applicationHosts.config prüfen 

<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...

Weiß jemand, ob die Dinge in Windows 7 gleich sind/sich unterscheiden?

28
Chris Fewtrell

Zuerst würde ich versuchen, aspnet_regiis -lv auszuführen. Dies sollte Ihnen eine Ausgabe wie folgt geben:

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

dass Sie leicht analysieren können, um zu überprüfen, ob Ihre Zielversion installiert und gültig ist. Ist dies nicht der Fall, müssen Sie die aspnet_regiis -i-Route wählen.

Vorausgesetzt, Sie können diese Überprüfung in C # durchführen, können Sie Ihrer ASP.NET-Anwendung eine Testseite hinzufügen. Nach dem, was Sie normalerweise für eine erfolgreiche Installation halten würden, führen Sie auf dieser Testseite eine HttpWebRequest durch. Die Seite selbst kann so einfach wie eine leere Seite sein und so kompliziert wie ein Selbsttest der Installation (Datei-/Ordnerberechtigungen, DB-Konfiguration usw.) und würde nur dann ein HTTP 200 zurückgeben, wenn alles in Ordnung ist. Ein Timeout oder Fehler weist auf eine fehlerhafte Installation hin. Dann löschen Sie optional die Testseite.

10
Gonzalo

Dieser Ausschnitt 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 es nach Belieben anpassen.

0
Learner