2010-12-14 110 views
14

Le défi consiste à déterminer si ASP.NET est activé dans IIS7 de manière fiable et correcte.Comment détecter si ASP.NET est activé dans IIS 7

Activation/désactivation se fait dans ce cas en allant dans:

Server Manager -> 
    Roles -> 
     Web Server (IIS) -> 
      Remove Role Services -> 
       Remove ASP.NET 

Le lieu naturel pour déterminer ce qui devrait être dans le fichier applicationHost.config. Cependant, avec ASP.NET activé ou désactivé, nous avons toujours le module "ManagedEngine" disponible, et nous avons toujours l'enregistrement de filtre isapi dans la balise.

Le meilleur que je peux trouver en ce moment est de vérifier si la balise <isapiCgiRestriction> inclut aspnet_isapi.dll, ou que le fournisseur de trace ASPNET est disponible.

Toutefois, ceux-ci ne détectent pas directement la présence de la configuration ASP.NET, mais seulement un effet secondaire qui pourrait être reconfiguré par l'utilisateur. Je préfère faire cela en examinant la configuration/installation IIS plutôt que l'OS lui-même, si possible, bien que l'énumération des rôles & Services sur le serveur pourrait être acceptable si nous pouvons garantir que cette technique fonctionnera toujours à chaque fois que IIS7 est utilisé.

Mise à jour

Merci pour les réponses. En clarifiant exactement ce que je veux faire, je tire les paramètres d'une variété d'endroits dans la configuration du serveur dans une vue unique (en lecture seule) pour montrer ce que l'utilisateur doit avoir configuré pour permettre au logiciel de fonctionner.

L'un des paramètres que je dois apporter est celui-ci: IIS Config showing ASP.NET not installed

L'un en rouge.

Je n'ai pas besoin de manipuler le réglage, il suffit de le reproduire. Je veux voir si l'utilisateur a vérifié la boîte ASP.NET quand ils ont ajouté le rôle d'IIS au serveur, comme dans cet exemple ils n'ont clairement pas. Je voudrais faire cela en regardant quelque chose de fiable dans IIS plutôt qu'en énumérant les services de rôle car je ne veux pas ajouter de dépendances spécifiques à la plate-forme sur la vérification dont je n'ai pas besoin. Je ne sais pas s'il sera toujours possible d'installer IIS7 sur un serveur qui ne dispose pas de l'infrastructure Roles/Services, mais de préférence, je préfère ne pas m'en préoccuper. J'ai également une charge de bibliothèques pour nettoyer autour d'IIS déjà. Cependant, j'ai aussi du mal à trouver comment énumérer les rôles/services, donc s'il y a une solution qui implique de le faire, ce serait certainement utile, et bien mieux que de vérifier l'effet secondaire d'avoir le fournisseur de trace ASPNET qui traîne.

Malheureusement, si vous ne vérifiez pas le bouton ASP.NET, vous pouvez toujours obtenir le module ManagedEngine dans le fichier IIS applicationHost.config, il ne s'agit donc pas d'une vérification fiable. Vous pouvez également avoir mappé ASP.NET en tant que filtre isapi, donc les vérifier n'est pas suffisant. Ces choses sont particulièrement problématiques dans le cas où ASP.NET a été installé mais a été supprimé.

Il semble que la meilleure solution serait d'examiner les services de rôle. Cependant, les informations sur l'API à ce sujet semblent plutôt rares, d'où le cri d'aide.

+0

S'agit-il d'une application console/Windows Forms ou d'une application IIS? Voulez-vous dire dans un site spécifique ou juste en général? – Kev

+0

La détection provient d'une application WinForms. –

+0

La détection doit être effectuée de manière générale. Fondamentalement, si le service de rôle ASP.NET est supprimé, c'est un paramètre à l'échelle du serveur, je suis après un moyen fiable de détecter cette condition. –

Répondre

14

La façon absolue de savoir s'ils ont vérifié que ou non est de rechercher la clé de Registre suivante:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components 

Là-dedans, vous devriez voir deux valeurs définies à 1, ASPNET et NetFxEnvironment et NetFxExtensibility. Cette clé de Registre est la clé d'installation IIS qui contient tous les composants qui ont été activés dans IIS.

+0

C'est le seul, parfait, merci! –

0

Alors voulez-vous le moyen facile? Fais un joli joli.page ASPX qui affiche en HTML avec un bloc d'erreur dans un div dans un espace réservé en disant "Vous devez installer ASP.NET" et le faire changer sur ASP.NET en cours d'installation à la place dire "ASP.NET est installé" et puis juste avoir l'outil lance cette page Web dans le navigateur par défaut après l'avoir copié dans le répertoire identifié dans IIS comme le site *: 80 (ou créer le mappage de répertoire dans IIS par programmation en modifiant le XML, puis en le supprimant ultérieurement)

Peut ne pas être le plus élégant, mais il garantit que les tests montrent quelles fonctionnalités sont réellement installées par rapport à ce qui est dans un fichier XML.


Parce que crieront « faire de la manière paresseuse ignorant » Je vais vous rappeler que la seule façon pour moi de savoir dans quelles fonctionnalités javascript je peux utiliser est de les tester avant d'essayer de les utiliser, ou supposer qu'ils sont là et le regarder exploser. Mon point est, peu importe ce qui est rapporté dans un fichier, il importe ce que vous pouvez réellement utiliser. Tout simplement parce que C: \ Windows \ Micrsoft.Net \ Framework \ v3.xxxxxxxx existe et a des fichiers ne signifie pas que les DLL sont enregistrés dans le GAC, n'est-ce pas?

+0

Je ne suis pas fan de ça. Je suis vraiment à la recherche d'un test spécifique "ce composant est manquant" plutôt que de mettre en place un contrôle de bout en bout, en arrière-plan, sans demander à l'utilisateur, correctement travailler toutes les urls nécessaires, etc. sont certainement un problème, mais je suis beaucoup plus intéressé par la recherche de composants manquants. Pour mes besoins, vérifier si le dossier .net3 existe est plus que suffisant. –

+0

Eh bien, comme je l'ai dit, c'était la façon facile paresseux. Avez-vous essayé de faire un instantané du fichier applicationHost.config avant et après l'installation d'ASP.NET sur une machine propre dans une machine virtuelle? – jcolebrand

+0

Oui, j'ai fait une différence entre les deux fichiers de configuration et la seule chose qui soit fiable est les deux paramètres mentionnés dans la question. J'ai mis à jour la question avec des détails plus spécifiques. –

2

Déterminer si asp.net est même une fonctionnalité installée (prérequis pour l'activer) peut être fait par PowerShell, ce qui implique qu'il y a .net api là-bas si vous creusez assez fort. Les méthodes PowerShell:

Import-Module servermanager 
Get-WindowsFeature web-asp-net 

Qui va retourner un objet de type Microsoft.Windows.ServerManager.Commands.Feature. La propriété installed est une valeur booléenne qui indique si la fonctionnalité est installée ou non.

+0

Quelqu'un sait-il comment refléter cela ou obtenir l'assemblage dont il a besoin pour réfléchir? En outre, on dirait que d'aller à SF était une bonne idée. – jcolebrand