Сбой с C # и службы каталогов на XP - PullRequest
1 голос
/ 03 февраля 2009

Я пытаюсь выполнить простой поиск данных с помощью C # и служб каталогов, но по какой-то причине он не работает ни на каких компьютерах с XP. Если я запускаю свой код на компьютере с Server 2003, проблем не возникает. Я потратил немало времени, пытаясь выяснить, есть ли, возможно, какой-нибудь дистрибутив, который мне нужен в XP, или его функциональности просто нет, но я нашел ссылки на других разработчиков, у которых похожий код работает под XP. Если у кого-то есть опыт или совет, которым я могу поделиться, я буду признателен за это.

Простой фрагмент кода, который вылетает для меня:

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
            }
        }
    }
}

Запуск этого под XP дает мне следующую ошибку с HRESULT -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()
       ...

Погугление различных частей информации об ошибке привело меня к мысли, что это довольно общая ошибка взаимодействия COM, и на данный момент у меня нет идей. Любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 03 февраля 2009

На основе трассировки стека и отражателя это выглядит как вызов ADsOpenObject возвращает E_ADS_BAD_PATHNAME . Эта ошибка указывает на то, что указанный вами путь к классу DirectoryEntry недопустим на текущем компьютере.

Если IIS установлен, то, возможно, поставщик IIS неправильно установлен на вашем компьютере.

См. Этот вопрос SO для получения дополнительной информации: ADSI не будет подключаться к IIS с рабочей станции XP

0 голосов
/ 03 февраля 2009

Установка IIS исправлена. Я не сталкивался с ADSI до того, как написал эту маленькую утилиту, поэтому я не понимал, что программное обеспечение может устанавливать свои собственные блоки функций ADSI. Спасибо за помощь!

...