Question

Je suis en train de faire une récupération de données simple avec C # et des services d'annuaire, mais pour une raison quelconque, il ne fonctionne pas sur les machines XP. Si je lance mon code sur une machine Server 2003, il n'y a aucun problème. J'ai passé un peu juste de temps à essayer de savoir s'il y a peut-être un peu redistribuable j'ai besoin sur XP ou si la fonctionnalité est tout simplement pas là, mais j'ai trouvé des références à d'autres développeurs qui ont un code similaire travaillant sous XP. Si quelqu'un a une expérience ou des conseils à partager, je vous en serais reconnaissant.

Un simple extrait de code qui est pour moi s'écraser:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.DirectoryServices;

namespace IIS_Site_Query_Tool
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            DirectoryEntry W3SVC = new DirectoryEntry("IIS://localhost/w3svc");
            foreach (DirectoryEntry Site in W3SVC.Children)
            {
                //Do some data processing
            }
        }
    }
}

L'exécution de cette sous XP me donne l'erreur folowing avec un HRESULT de -2147463168:

System.Runtime.InteropServices.COMException was unhandled
  Message="Unknown error (0x80005000)"
  Source="System.DirectoryServices"
  ErrorCode=-2147463168
  StackTrace:
       at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
       at System.DirectoryServices.DirectoryEntry.Bind()
       at System.DirectoryServices.DirectoryEntry.get_IsContainer()
       at System.DirectoryServices.DirectoryEntries.ChildEnumerator..ctor(DirectoryEntry container)
       at System.DirectoryServices.DirectoryEntries.GetEnumerator()
       ...

googler les différentes informations dans l'erreur me conduire à penser que c'est une erreur COM Interop assez générique, et je suis d'idées à ce stade. Toute aide est appréciée!

Était-ce utile?

La solution

Basé sur la trace de la pile et le réflecteur, il ressemble à un appel à ADsOpenObject est de retour E_ADS_BAD_PATHNAME . Cette erreur indique que le chemin que vous avez fourni à la classe DirectoryEntry est pas valide sur la machine actuelle.

Si IIS est installé, il est possible que le fournisseur d'IIS est pas correctement installé sur votre machine.

Voir cette question SO pour plus de détails: ADSI ne sera pas se connecter à IIS de XP Workstation

Autres conseils

Installation IIS réparée. Je ne l'avais pas rencontré ADSI avant d'écrire ce petit utilitaire, donc je ne savais pas que le logiciel pourrait installer leurs propres morceaux de fonctionnalité ADSI. Merci pour l'aide!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top