Le défi consiste à déterminer si ASP.NET est activé dans IIS7 de manière fiable et correcte.
Activer/Désactiver se fait dans ce cas en allant dans:
Server Manager ->
Roles ->
Web Server (IIS) ->
Remove Role Services ->
Remove ASP.NET
L'emplacement naturel pour déterminer cela devrait être dans le fichier applicationHost.config. Cependant, avec ASP.NET activé ou désactivé, le module "ManagedEngine" est toujours disponible et nous avons toujours l'enregistrement de filtre isapi dans la balise.
Pour le moment, le mieux que je puisse trouver consiste à vérifier si la balise <isapiCgiRestriction> comprend l'aspnet_isapi.dll ou si le fournisseur de trace ASPNET est disponible.
Cependant, ils ne détectent pas directement la présence de la configuration ASP.NET, il s'agit simplement d'un effet secondaire qui pourrait éventuellement être reconfiguré par l'utilisateur.
Pour ce faire, je préfère examiner la configuration/configuration IIS plutôt que le système d'exploitation lui-même, si possible, bien que l'énumération des rôles et services sur le serveur puisse être acceptable si nous pouvons garantir que cette technique fonctionnera toujours. chaque fois que IIS7 est utilisé.
Mettre à jour
Merci pour les réponses. En clarifiant exactement ce que je veux faire, j'inscris les paramètres de divers emplacements de la configuration du serveur dans une seule vue (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 importer est celui-ci:
Celui surligné en rouge.
Je n'ai pas besoin de manipuler le réglage, mais de le reproduire. Je veux voir si l'utilisateur a coché la case ASP.NET lorsqu'il a ajouté le rôle IIS au serveur, comme dans cet exemple, ce n'est clairement pas le cas.
Pour ce faire, je voudrais examiner quelque chose de fiable dans IIS plutôt que d'énumérer les services de rôle, car je ne souhaite pas ajouter de dépendances spécifiques à une plate-forme dont je n'ai pas besoin. Je ne sais pas s'il sera possible d'installer IIS7 sur un serveur dépourvu d'infrastructure de rôles/services, mais de préférence, je préfère ne pas m'en soucier. J'ai également une charge de bibliothèques pour parcourir IIS déjà.
Cependant, j'ai également du mal à trouver le moyen d'énumérer les rôles/services. Par conséquent, si une solution implique de le faire, ce serait certainement utile et bien mieux que de vérifier les effets secondaires du fournisseur de trace ASPNET. traîner.
Malheureusement, si vous ne cochez pas le bouton ASP.NET, vous pouvez toujours obtenir le module ManagedEngine dans le fichier IIS applicationHost.config. Ce n'est donc pas une vérification fiable. Vous pouvez également faire en sorte qu'ASP.NET soit mappé en tant que filtre isapi. Il ne suffit donc pas de les vérifier. Ces problèmes 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 de l'API à ce sujet sont plutôt rares, d'où le besoin d'aide.
Le moyen absolu de savoir s'ils ont vérifié cela ou non est de rechercher la clé de registre suivante:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components
Dans celui-ci, vous devriez voir deux valeurs définies sur 1
, ASPNET
et NetFxEnvironment
et NetFxExtensibility
. Cette clé de registre est la clé d'installation IIS qui contient tous les composants activés dans IIS.
Déterminer si asp.net est même une fonctionnalité installée (condition préalable à son activation) peut être effectué via PowerShell, ce qui implique l'existence d'une api .net si vous creusez suffisamment. Les méthodes PowerShell:
Import-Module servermanager
Get-WindowsFeature web-asp-net
Ce qui retournera un objet de type Microsoft.Windows.ServerManager.Commands.Feature
. La propriété installed
est boolean et indique si la fonctionnalité est installée ou non.
Alors voulez-vous la solution de facilité? Créez une jolie page .aspx qui affiche au format HTML avec un bloc d'erreur dans une div dans un espace réservé indiquant "Vous devez installer ASP.NET" et laissez-la changer lors de l'installation d'ASP.NET pour indiquer "ASP.NET est installé "et laissez simplement l'outil lancer cette page Web dans le navigateur par défaut après l'avoir copiée dans le répertoire identifié dans IIS en tant que site *: 80 (ou créer le mappage de répertoire dans IIS par programme en modifiant le XML puis en le supprimant plus tard)
Ce n’est peut-être pas le plus élégant, mais cela garantit que les tests montrent quelles fonctionnalités sont réellement installées par rapport au contenu d’un fichier XML.
Parce que cela va crier "faites-le à la manière ignorante et paresseuse", je vous rappellerai que la seule façon pour moi de savoir en javascript quelles fonctionnalités je peux utiliser est de les tester avant d'essayer de les utiliser, ou de supposer qu'elles sont là et regardez-le exploser. Mon point est que peu importe ce qui est rapporté dans un fichier, ce que vous pouvez réellement utiliser est important. Ce n'est pas parce que C:\Windows\Micrsoft.Net\Framework\v3.xxxxxxxxx existe et que des fichiers existent que les dll sont enregistrées dans le GAC, n'est-ce pas?