Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.033 c