Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

EOleSysError "Class not registered"   Найти похожие ветки 

 
Aldor_   (2004-08-06 13:47) [0]

Программа под WinXP работает нормально, а под Win2K вылетает сабж. Подозрвеваю (нет возможности проверить точнее), что ошибка происходит на строке
CreateComObject(CLASS_EnumInstalledApps) as IEnumInstalledApps (строка из модуля, ковертнутого из IDL-файла)
Хотя в справке сказано, что поддерживаются винды 98-XP. Или тогда о чем сигнализирует сабж?


 
Digitman ©   (2004-08-06 13:50) [1]


> о чем сигнализирует сабж?


о том что фабрика класса CLASS_EnumInstalledApps не зарегистрирована в реестре той ОС, в среде которой предпринимается попытка создать экз-р этого класса


 
Aldor_   (2004-08-06 14:17) [2]

Digitman ©   (06.08.04 13:50) [1]
Значть дело именно в ОС и ничего здесь поделать нельзя


 
Digitman ©   (2004-08-06 14:20) [3]

ерунда полная
убедись что ФК действительно зарегистрирована в реестре


 
Aldor_   (2004-08-06 14:44) [4]

Digitman ©   (06.08.04 14:20) [3]

 Извиняюсь за явно дилетантский вопрос, но как в этом убедиться? И если окажется, что не зарегистрен, то как зарегистрить?


 
Digitman ©   (2004-08-06 14:47) [5]

выполни ком.строку

regsvr32 myfabric.dll


 
Гаврила ©   (2004-08-06 15:07) [6]

Это что за класс то ? В MSDN про него ничего нет.
Свой собственный чтоли ?


 
Erik1   (2004-08-06 15:13) [7]

Возможно чтото самопальное.


 
Aldor_   (2004-08-06 15:19) [8]

> Это что за класс то ? В MSDN про него ничего нет.
 Вообще-то странно, в msdn хорошо описана работа со списком установленных программ, и дается ссылка на idl-файл, где все соответствующие интерфейсы определены.
 Импортнул я этот idl-файл (shappmgrp.idl), а там интерфейсы с другими названиями (вот IEnumInstalledApps, например) и другими методами (хотя все очень похоже), пришлось по названиям методов догадываться, что вызывать.
 Вот такая вот фигня в синагоге творится. Была идея, что я наткнулся на старую информациб в msdn, но о новых интерфейс, как Вы тоже смогли убедиться тоже ничего в msdn неизвестно.

Digitman ©   (06.08.04 14:47) [5]
> выполни ком.строку regsvr32 myfabric.dll

LoadLibrary("myfabric.dll") failed - The specified module counld not be found


 
Digitman ©   (2004-08-06 15:24) [9]


> Aldor_   (06.08.04 15:19) [8]


)) ... да это к примеру я ! ... посчитал что библиотека с ФК - твоей разработки ..

ок

открой XXX_TLB.PAS, найди строчку, определяющую зн-е ид-ра CLASS_EnumInstalledApps, скопируй в буфер его значение (т.е. CLSID) и поищи его в реестре


 
Aldor_   (2004-08-06 15:34) [10]


> )) ... да это к примеру я ! ... посчитал что библиотека
> с ФК - твоей разработки ..


:))))))) а я еще удивлялся, какое название библиотеки странное :)


> открой XXX_TLB.PAS, найди строчку, определяющую зн-е ид-ра
> CLASS_EnumInstalledApps, скопируй в буфер его значение (т.е.
> CLSID) и поищи его в реестре

 На машине с WinXP, естественно, нашел, а вот на той, где Win2K - нет. Хотя, еще раз повторяю, в msdn написано, что поддержка этих интерфейсов начинается еще с Win98


 
Digitman ©   (2004-08-06 15:38) [11]

вот теперь открывай этот ключ в ХР и смотри, куда смотрит параметр InProcServer


 
VMcL ©   (2004-08-06 15:42) [12]

>>Digitman ©  (06.08.04 15:38) [11]

<offtopic>
 Пошаговый саппорт :))
</offtopic>


 
Aldor_   (2004-08-06 15:45) [13]


> вот теперь открывай этот ключ в ХР и смотри, куда смотрит
> параметр InProcServer

В {<CLSID>}\InProcServer32 параметр (Default) имеет значение System32\appwiz.cpl


 
Digitman ©   (2004-08-06 15:54) [14]


> Aldor_   (06.08.04 15:45) [13]


а теперь смотри, есть ли файл этого апплета в наличии в W2k - он обязан там быть !

ищи в реестре ссылки на строчку "appwiz.cpl"

у меня - Винтукей, и этот апплет присутствует и зарегистрирован в реестре так :

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0B124F8C-91F0-11D1-B8B5-006008059382}\InProcServer32


 
Digitman ©   (2004-08-06 15:56) [15]


> VMcL ©   (06.08.04 15:42) [12]


ввязался же ... куда теперь деваться ... доведем уж слепого до цели !


 
Aldor_   (2004-08-06 16:02) [16]

Хм...


0B124F8F-91F0-11D1-B8B5-006008059382 - WinXP
0B124F8C-91F0-11D1-B8B5-006008059382 - Win2K


 и... эээ... что теперь, проверять в ран-тайм версию системы? А может CLSID еще и от сервис пака к сервис паку меняется?


 
Aldor_   (2004-08-06 16:03) [17]

>  доведем уж слепого до цели !

 :) Ну почему же слепого? Просто начинающего :)


 
Digitman ©   (2004-08-06 16:08) [18]


> Aldor_   (06.08.04 16:02) [16]


эээ... я никогда не вдавался в эти подробности, это уж ты сам выясняй

в дан. же случае попробуй поменять CLSID в XXX_TLB.PAS на реально зарегистрированный и попробуй создать объект и поработать с ним - вероятность совместимости интерфейсов должна быть явно не нулевая)


 
Aldor_   (2004-08-06 16:32) [19]

Подставил 2К-шное значение CLSID, запустил (под Win2K), ответила опять эксепшеном: "Class factory cannot suply requeated class". Так верить msdn или нет? (я об информации о поддержке разных ОС)


 
Digitman ©   (2004-08-06 16:51) [20]

значится, так ...

выкинь нафих то что ты получл с пом. импорта IDL

1. открой любой Делфи-проект
2. выполни меню Projects -> Import Type Library..
3. по кнопке Add выбери файл appwiz.cpl в сист.каталоге ОС
4. нажми кн. Create Unit

в рез-те у тебя будет создан файл SHAPPMGRLib_TLB.pas

повтори это для другой ОС, получи такой же файл для нее, сравни эти файлы

если они совпадают в части CLSID и декларируемых в них интерфейсов, то лажа, наверно - в использованном тобой IDL


 
Aldor_   (2004-08-06 16:58) [21]

Спасибо большое за консультацию, попробую, о результатах в этой ветке сообщу.


 
Бином Ньютоныч   (2004-08-06 17:04) [22]

Так и есть: в appwiz.cpl в TLB стоит
0B124F8F-91F0-11D1-B8B5-006008059382
а в реестре
0B124F8C-91F0-11D1-B8B5-006008059382

>Aldor_

Явно ошибка регистрации, исправь в реестре. Заодно и остальные GUID из этой библии проверь. И нам расскажи:)


 
Aldor_   (2004-08-07 06:54) [23]

Вот резулты импорта appwiz.cpl:

WinXP:

IID_IEnumInstalledApps: TGUID = "{1BC752E1-9046-11D1-B8B3-006008059382}";
CLASS_EnumInstalledApps: TGUID = "{0B124F8F-91F0-11D1-B8B5-006008059382}";
IID_IEnumPublishedApps: TGUID = "{0B124F8C-91F0-11D1-B8B5-006008059382}";


Win2K:

IID_IEnumInstalledApps: TGUID = "{1BC752E1-9046-11D1-B8B3-006008059382}";
CLASS_EnumInstalledApps: TGUID = "{0B124F8F-91F0-11D1-B8B5-006008059382}";
IID_IEnumPublishedApps: TGUID = "{0B124F8C-91F0-11D1-B8B5-006008059382}";

 (совпадают!)

 В реестре в WinXP appwiz.cpl находится в ключе 0B124F8F
 В Win2K - в ключе 0B124F8C
 
 Я правильно понимаю, что в реестре хранится CLASS GUID?

 Значит в Win2K запись в реестре на самом деле указывает на IID_IEnumPublishedApps, а причем здесь PublishedApps?

 Если честно, не понимаю, как мне поступать?


 
Бином Ньютоныч   (2004-08-07 10:36) [24]

В разделе CLSID хранятся Class ID, а вразделе Interface - Interface ID. Говорю же, ошибка регистрации. Просто сделай RegSvr32 AppWiz.cpl. И еще. Поищи в ХР в реестре интерфейсы. Если обнаружатся, то надо и W2k из зарегистрировать.


 
Daniel.   (2004-08-07 13:42) [25]

Не поверите, в Win2K переименовал ключ в реестре 0B124F8C -> 0B124F8F и все заработало!
Причем как с ...TBL.pas от appwiz.cpl Win2K, так и от appwiz.cpl WinXP.

 Что это? Баг винды?

> RegSvr32 AppWiz.cpl

 Нет у меня приложения RegSrv32. Что оно делает?


 
Aldor_   (2004-08-07 13:45) [26]

Daniel.   (07.08.04 13:42) [25]

Извиняюсь, это я. Опять конфликт пользователей ена одном компе.


 
Бином Ньютоныч   (2004-08-07 16:08) [27]

>Не поверите, в Win2K переименовал ключ в реестре 0B124F8C -> 0B124F8F и все заработало!

Ух ты! Да ты что! А про что тебе в [22] было сказано?

> Нет у меня приложения RegSrv32.

И слава Богу. Спокойней как-то.


 
VMcL ©   (2004-08-08 11:48) [28]

RegSvr32


 
Aldor.   (2004-08-08 14:48) [29]

VMcL ©   (08.08.04 11:48) [28]
RegSvr32

Упс, выпрямилку срочно.

RegSvr32 AppWiz.cpl - НЕ вносит измения, описанные в [25]. Как так?


 
Бином Ньютоныч   (2004-08-08 14:55) [30]

>Aldor.   (08.08.04 14:48) [29]
Это странно. У меня внесло. В таком случае можно вручную, всего 2 места. Но, возможно, лучше просто учитывать эту ситуацию в коде.


 
Aldor.   (2004-08-08 15:14) [31]

> всего 2 места

 Какое второе?? (первое описано в [25])


 
Бином Ньютоныч   (2004-08-08 15:40) [32]

>Aldor.   (08.08.04 15:14) [31]

Поиском по реестру найди. Я не запомнил, а опять запускать лень:)


 
Бином Ньютоныч   (2004-08-08 15:49) [33]

Ищи имя ключа, а не раздела. Там отображаемое опиание класса.



Страницы: 1 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.033 c
14-1091585711
Думкин
2004-08-04 06:15
2004.08.22
С днем рождения! 4 августа


8-1086114069
Adventure
2004-06-01 22:21
2004.08.22
Теория и практика идентификации изображений ...


3-1091037724
Wolfram
2004-07-28 22:02
2004.08.22
Ошибка конструкции JOIN


1-1091701855
Stager
2004-08-05 14:30
2004.08.22
Многоколоночный TreeView


3-1090846354
AleXqwq
2004-07-26 16:52
2004.08.22
ADO+MySql