Comment déterminer la version ASP.NET d'un répertoire virtuel ou d'un site Web à l'aide de C #?

StackOverflow https://stackoverflow.com/questions/636569

Question

Comment savoir que le framework .NET d'un répertoire virtuel IIS utilise en C #. J'ai besoin de l'afficher à l'utilisateur.

using System.DirectoryServices;
using System.IO;

private enum IISVersion
{
    IIS5,
    IIS6
}

private void ReadVirtualDirectory(string server, string directory, IISVersion version)
{
    string siteID = string.Empty;
    string path = string.Empty;

    switch(verison)
    {
        case IISVersion.IIS5:
            path = string.Format("IIS://{0}/W3SVC/1/Root", server);

            if(!string.IsNullOrEmpty(directory))
            {
                path = string.Concat(path, "/", directory);
            }

            break;

        case IISVersion.IIS6:
            path = string.Format("IIS://{0}/W3SVC", server);

            if(!string.IsNullOrEmpty(directory))
            {
                DirectoryEntry de = new DirectoryEntry(path);

                foreach(DirectoryEntry child in de.Children)
                {
                    if(child.Properties["ServerComment"].Value.ToString().ToLower() == directory)
                    {
                        siteID = child.Name;
                        break;
                    }
                }

                path = string.Concat(path, "/", siteID);

                de.Close()
                de = null;
            }

            break;
    }

    DirectoryEntry iis = new DirectoryEntry(path);

    //display iis properties here...
    //need to display if the virtual directory is running under .NET 1.1 or 2.0

    iis.Close();
    iis = null;       
}
Était-ce utile?

La solution

Dans IIS, il n’existe pas de moyen sûr et rapide de savoir quelle version d’ASP.NET est utilisée par un site Web ou un répertoire "virtuel" (dossier d’application de site Web - celui dont les icônes sont cogs).

La raison en est que IIS et les données de la métabase ne connaissent que les scriptsmaps et pas les versions ASP.NET (ASP.NET n’est en fin de compte qu’une autre application ISAPI). Une façon de déterminer la version d’ASP.NET consiste à utiliser les éléments suivants:

using System;
using System.DirectoryServices;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"IIS://Localhost/W3SVC/1/root/MyApp";
            Console.WriteLine(GetAspNetVersion(path));
        }

        private static string GetAspNetVersion(string path)
        {
            using (DirectoryEntry app = new DirectoryEntry(path))
            {
                PropertyValueCollection pvc = app.Properties["ScriptMaps"];

                foreach (string scriptMap in pvc)
                {
                    if (scriptMap.StartsWith(".aspx"))
                    {
                        string[] mapping = scriptMap.Split(',');
                        string scriptProcessor = mapping[1];

                        // The version numbers come from the path
                        // C:\Windows\Microsoft.NET\Framework\
                        // which will be present in the script processor 
                        // DLL path
                        if (scriptProcessor.Contains("v1.1.4322"))
                        {
                            return "1.1";
                        }

                        if (scriptProcessor.Contains("v2.0.50727"))
                        {
                            return "2.0";
                        }
                    }
                }
                throw new Exception("Unknown version ASP.NET version.");
            }
        }
    }
}

Ce n’est pas idéal, mais n’a pas manqué à nos besoins en tant qu’hébergeur de nos applications / services de provisionnement. Je soupçonne que le plug-in IIS MMC effectue une vérification similaire dans les coulisses. Mon propre examen détaillé de la métabase (fichiers XML basés sur Windows 2000 et Windows 2003) a révélé qu’il n’existait pas de propriété / attribut visible stockant un numéro de version ASP.NET spécifique.

Autres conseils

Ce n'est peut-être pas la plus jolie des méthodes, mais si vous pouvez récupérer et analyser le résultat de aspnet_regiis.exe -lk , vous obtiendrez toutes les informations dont vous avez besoin. Exemple de sortie d’un disque dur virtuel SharePoint:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_Regiis -lk
W3SVC/  1.1.4322.2407
W3SVC/1/ROOT/Reports/   2.0.50727.0
W3SVC/1/ROOT/ReportServer/      2.0.50727.0
W3SVC/1619303638/Root/  2.0.50727.0
W3SVC/1619303638/Root/_layouts/images/  1.1.4322.2407
W3SVC/1619303638/Root/_layouts/inc/     1.1.4322.2407
W3SVC/1720207907/root/  2.0.50727.0
W3SVC/1720207907/root/SharedServices1/  2.0.50727.0
W3SVC/1848312571/Root/  2.0.50727.0
W3SVC/1848312571/Root/_layouts/images/  1.1.4322.2407
W3SVC/1848312571/Root/_layouts/inc/     1.1.4322.2407
W3SVC/784543535/Root/   2.0.50727.0
W3SVC/784543535/Root/_layouts/images/   1.1.4322.2407
W3SVC/784543535/Root/_layouts/inc/      1.1.4322.2407
W3SVC/98413328/Root/    2.0.50727.0
W3SVC/98413328/Root/_layouts/images/    1.1.4322.2407
W3SVC/98413328/Root/_layouts/inc/       1.1.4322.2407
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top