Klientami DCOM nie można tworzyć obiektów


Objawy


Distributed programy klienckie systemu nazw domen (DCOM, Component Object Model) uruchamianych wewnątrz sesje serwera terminali, innych niż konsoli nie można tworzyć obiektów klas wykonane wewnątrz serwerów DCOM uruchomione jako usługi serwera terminali.


Wystąpienia identyfikator zdarzenia 10010 się również pojawić z modelu DCOM w Podglądzie zdarzeń z następującym opisem:
< Identyfikator clsid > serwera nie zarejestrował się w modelu DCOM w wymaganym czasie.
- lub -
Może pojawić się następujący komunikat o błędzie:
Wywołanie funkcji CoGetClassObject nie powiodła się - wykonanie serwera nie powiodło się CO_E_SERVER_EXEC_FAILURE 0x80080005

Przyczyna


To zachowanie jest ponieważ klas tych obiektów są traktowane jako globals użytkownika przez model DCOM i serwera terminali.


Jednak DCOM i serwer terminali zapewniają możliwość rejestrowania klas DCOM jako globals systemu. Jednak w przypadku klasy zaimplementowane w usługach, ich powinny być traktowane jako globals systemu, chyba że gdyby zostały jawnie zarejestrowane jako globals użytkownika.

Rozwiązanie


Ważne Niniejsza sekcja, metoda lub zadanie zawiera informacje dotyczące modyfikowania rejestru. Jednak niepoprawne zmodyfikowanie rejestru może spowodować poważne problemy. W związku z tym upewnij się, że wykonujesz następujące kroki ostrożnie. Aby zapewnić sobie dodatkową ochronę, wykonaj kopię zapasową rejestru przed przystąpieniem do modyfikacji. Wtedy będziesz mógł przywrócić rejestr w przypadku wystąpienia problemu. Aby uzyskać więcej informacji na temat wykonywania kopii zapasowej i przywracania rejestru, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
322756 jak wykonać kopię zapasową i przywrócić rejestr w systemie Windows

Jako globalny system jawnie zarejestrować klasy DCOM, wykonaj następujące kroki:

  1. Jeśli nie istnieje, utwórz następujący klucz rejestru:
    HKLM\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Compatibility\CLSID
  2. Utwórz podklucz o identyfikatorze {CLSID}, jak jego nazwa, gdzie identyfikator CLSID jest identyfikator klasy, klasy modelu DCOM, który ma być system global. Na przykład byłoby podklucz:
    {41116C00-8B90-101B-96CD-00AA003B14FC}
  3. W podkluczu powyżej Utwórz fSystemGlobalClass jako nazwę wartości typu REG_DWORD i przypisać jej dane wartości równe 1.
Czy można uaktualnić do systemu Microsoft Windows 2000 Server z usługami terminalowymi, który nie posiada to samo ograniczenie.

Stan


Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych na początku tego artykułu.

Więcej informacji


Aby odtworzyć ten problem, należy użyć przykładowego modelu DCOM o nazwie "ATLDRAW", dostarczane z ActiveX Template Library (ATL).