IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

Lister les pools d'application sous IIS6.0


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Par défaut Lister les pools d'application sous IIS6.0
    Bonjour à tous.
    Je souhaite réaliser un programme qui m'afficherai la liste des pools d'applications tournant sur un serveur.
    Le serveur fonctionne sous Windows 2003 serveur le framework 3.5 y est installé et IIS et en version 6.0.
    Pour faire mon programme j'utilise la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.DirectoryServices.DirectoryEntry
    Mon problème et que je n'arrive pas à obtenir le nom des pools tournants sur la machine,en effet j'obtiens au mieux le chemin du pool(comprenant son PID)

    Je sais q'un scripts .vbs de Windows affiche la correspondance entre le PID et le nom d'un pool d'application.

    Ma seul solution serait juste de lancer ce script et d'en récupérer la sortie ?
    Edit(16h02): L'éxécution du script (c:\WINDOWS\System32\issapp.vbs) en question me renvoit une erreur:aucun résultats :s alors et mes pools sont bien indiqués comme actifs.


    PS:
    Voici le code de mon programme de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.DirectoryServices;
    using System.Reflection;
    using System.Runtime.InteropServices;
    using System.Collections;
     
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                EnumerateApplicationsInPool("IIS://localhost/W3SVC/AppPools/DefaultAppPool", this.listBox1);
            }
            static void EnumerateApplicationsInPool(string metabasePath, ListBox li2)
            {
                //  metabasePath is of the form "IIS://<servername>/W3SVC/AppPools/<poolName>"
                //    for example "IIS://localhost/W3SVC/AppPools/DefaultAppPool" 
                //Console.WriteLine("\nEnumerating applications for the {0} pool:", metabasePath);
                li2.Items.Add("\nEnumerating applications for the " + metabasePath + " pool:");
     
                try
                {
                    DirectoryEntry entry = new DirectoryEntry(metabasePath);
     
                    if ("IIsApplicationPool" == entry.SchemaClassName)
                    {
                        object[] param;
                        param = (object[])entry.Invoke("EnumAppsInPool", null);
                        foreach (string s in param)
                        {
                            li2.Items.Add("\n");
                            li2.Items.Add("Guid:" + entry.Guid +"");
                            li2.Items.Add("Path:"+entry.Path+"");
                            li2.Items.Add("ClassName:"+entry.SchemaClassName+"");
                            li2.Items.Add("NativeGuid:"+entry.NativeGuid+"");
                            li2.Items.Add("NativeObject:"+entry.NativeObject+"");
                            li2.Items.Add("Name:"+entry.Name+"");
                            li2.Items.Add("Properties:" + entry.Properties + "");
                            li2.Items.Add(s);
                            li2.Items.Add("\n");
                        }
                        //Console.WriteLine("  {0}", s);
                        //Console.WriteLine(" Done.");
                        li2.Items.Add(" Done.");
                    }
                    else
                        //Console.WriteLine(" Failed in EnumerateApplicationsInPool; {0} is not an app pool", metabasePath);
                    li2.Items.Add(" Failed in EnumerateApplicationsInPool; " + metabasePath + " is not an app pool");
                }
                catch (Exception ex)
                {
                    //Console.WriteLine("Failed in EnumerateApplicationsInPool with the following exception: \n{0}", ex);
                    li2.Items.Add("Failed in EnumerateApplicationsInPool with the following exception: \n"+ex+"");
                }
            }
     
        }
    }

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Par défaut
    Salut !

    En voyant ton problème, j'ai eu envie de m'inscrire car j'ai galère avec IIS et DirectoryServices.

    Alors voilà une fonction qui récupère la liste des pools d'applications qui tourne sur le serveur. Par contre sa rempli une List de type string ^^. Je te laisse adapté, en espérant t'avoir aidé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    public const string IIS = "IIS://";
        public const string WEBSERVICE = "/W3SVC";
    public static string IISAPPLICATIONPOOLS = "/AppPools";
     
    public static List<string> GetAppPools(string ServerName)
        {
          string strIISPath = WebSiteInfo.IIS + ServerName + WebSiteInfo.WEBSERVICE + IISAPPLICATIONPOOLS;
          if (IsExist(strIISPath))
          {
            // Generate Entry point
            DirectoryEntry objDirectoryEntry = new DirectoryEntry(strIISPath);
            try
            {
              List<string> AppPools = new List<string>();
              DirectoryEntries objDirectoryEntries = objDirectoryEntry.Children;
              foreach (DirectoryEntry tempDirectoryEntry in objDirectoryEntries)
              {
                System.DirectoryServices.PropertyCollection pr = tempDirectoryEntry.Properties;
                AppPools.Add(tempDirectoryEntry.Name);
              }
              return AppPools;
            }
            finally
            {
              objDirectoryEntry.Close();
            }
          }
          else
            return null;
        }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Par défaut
    Merci de ta réponse je vais tester la fonction de suite

    J'avais réussi à réaliser un script .vbs qui permettait de connaitre le nom des pool d'application. Je pensait donc partir de la et en récupérer la sortie ou adapter le code en C#.


    Voici le code si ca peut aider quelqu'un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    strComputer = "."
    Set objWMIService = GetObject _
        ("winmgmts:{authenticationLevel=pktPrivacy}\\" _
            & strComputer & "\root\microsoftiisv2")
     
    Set colItems = objWMIService.ExecQuery _
        ("Select * from IIsApplicationPoolSetting")
     
    For Each objItem in colItems
     
        Wscript.Echo "Name: " & objItem.Name
     
     
    Next

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Par défaut
    Fonction adaptée sans problème à mes besoins.
    Merci de ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lister les répertoires et leurs sous-répertoires, c'est ok
    Par ouskel'n'or dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 17/08/2009, 09h59
  2. Lister les applications en cours
    Par The Lord of Nesquik dans le forum Windows
    Réponses: 5
    Dernier message: 27/07/2006, 16h07
  3. [VB6]lister les dossiers et sous dossier
    Par Jacen dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/04/2006, 08h06
  4. Lister les fichiers de plusieurs sous-répertoire ?
    Par ratbiker dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 25/11/2005, 21h20
  5. Lister les applications en cour...
    Par deetox dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/10/2005, 19h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo