web-dev-qa-db-fra.com

Déterminer si ASP.Net est correctement enregistré

Quelqu'un a-t-il une méthode à toute épreuve (idéalement en C #!) Pour déterminer si ASP.Net est correctement enregistré sur votre ordinateur?

J'écris un programme d'installation pour une application ASP.Net et j'ai besoin de savoir si je dois exécuter aspnet_regiis

À l'heure actuelle, nous exécutons toujours aspnet_regiis - I pour nous assurer que ASP.Net est enregistré correctement, mais cela n'est pas souhaitable car il provoque un redémarrage de tous les pools d'applications. 

Il existe plusieurs pages utiles sur le Web (par exemple, http://www.codeproject.com/KB/cs/iisdetection.aspx ), mais comme le montrent les commentaires de ce message, il indique qu'ASP.Net est enregistré mais que aspnet_regiis doit encore être exécuté pour configurer IIS. L'utilisateur 'JonB' a posté quelque chose qui semble pouvoir fonctionner pour IIS6 (et la compatibilité avec IIS6 activée avec IIS6), mais il me reste à écrire un code de détection séparé pour IIS 7 avec le mode de compatibilité IIS6 désactivé.

Alors, est-ce que quelqu'un a déjà craqué cette noix? Si tel est le cas, faites-le nous savoir car cela nous fera gagner du temps. Sinon, je vais essayer de porter la solution C++ en C # pour IIS6 et pour IIS7, je vais examiner la section <isapiCgiRestriction> de applicationHosts.config pour 

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

Dernière question...

Est-ce que quelqu'un sait si les choses sont les mêmes/différentes dans Windows 7?

28
Chris Fewtrell

D'abord, j'essayerais de lancer aspnet_regiis -lv. Cela devrait vous donner un résultat comme:

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 vous pouvez facilement analyser pour vérifier que votre version cible est installée et valide. Si ce n'est pas le cas, vous devrez emprunter la route aspnet_regiis -i.

De plus, étant donné que vous pouvez effectuer cette vérification en C #, vous pouvez ajouter une page de test à votre application ASP.NET. Après ce que vous considéreriez normalement comme une installation réussie, faites une HttpWebRequest sur cette page de test. La page elle-même peut être aussi simple qu'une page vide et aussi compliquée que d'exécuter une vérification automatique de l'installation (autorisations de fichier/dossier, configuration de la base de données, etc.) et ne renverrait un HTTP 200 que si tout va bien. Toute temporisation ou erreur indique une mauvaise installation. Ensuite, éventuellement, supprimez la page de test.

10
Gonzalo

Cet extrait fonctionne pour 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
}
...

Vous pouvez l'ajuster à votre guise.

0
Learner