Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > Ошибка регистрации COM+ компонента


Автор: FREEDEV 11.7.2007, 17:16
Создал COM+ компонент, на моей машине без проблем регистрируется.
Пытаюсь заегистрировать на другой машине с помощью mmc(Администрирование -> Службы компонентов - > компьютеры -> Мой компьютер -> Приложения COM+...далее "создать приложение"..."создать компонент", выбираю мой dll) получаю такого рода ошибку:

Код

Installation of 'H:\Component.dll' into '{9037A4E3-32CA-4670-BC27-EF88DC06ABD5}' failed with an exception:

System.EnterpriseServices.RegistrationException: Could not install type library 'H:\Component.tlb' into application 'Component'.
   at System.EnterpriseServices.RegistrationDriver.InstallAssembly(RegistrationConfig regConfig, Object obSync)
   at System.EnterpriseServices.RegistrationHelper.InstallAssemblyFromConfig(RegistrationConfig& regConfig)
   at System.EnterpriseServices.RegistrationHelper.InstallAssembly(String assembly, String& application, String partition, String& tlb, InstallationFlags installFlags)
   at System.EnterpriseServices.Internal.ComManagedImportUtil.InstallAssembly(String asmpath, String parname, String appname)




Хотя с помощью regasm регестрируется и работает нормально. Что б это могло быть?

Автор: mr.DUDA 11.7.2007, 21:20
Что-то с комом, видать. Больше хелпа спродуцировать не могу, надо читать вумные книги.

Автор: tol05 11.7.2007, 21:42
У меня только немного практического опыта  smile 
Не знаю, поможет или нет... 

Я как-то долго мучался с регистрацией, пока не узнал, что для создания более-менее пригодного COM-враппера для .Net библиотеки нужно обязательно выполнить такие условия:
1. Класс должен быть public и предоставлять public методы для интерфейса взаимодействия с внешним кодом.
2. .Net-dll должна иметь атрибут [ComVisible(true)]
3. .Net-dll должна иметь атрибут [ProgId(...)] c уникальным GUID-ом. я генерировал его вручную через GuidGen.exe
4. .Net-dll сборка должна иметь строгое имя и быть установленной в GAC. (утилита gacutil.exe)
5. .Net-dll должна быть зарегистрирована в реестре с помощью "regasm.exe /tlb <FileName>"

Цитата(FREEDEV @  11.7.2007,  17:16 Найти цитируемый пост)
Создал COM+ компонент, на моей машине без проблем регистрируется
как именно создал? Через студию?
пока я работал через студию, тоже все было хорошо. Только студия сама GUID подбирает, в GAC устанавливает и регистрирует в реестре.

Те 5 пунктов я выискал, когда нужно было мой плагин на сервер забросить, где только CLR стояла и больше ничего...

Автор: mr.DUDA 11.7.2007, 21:43
Ещё для COM+ можно создать инсталлятор, он сам установит компоненту. Подробнее - например http://www.dialektika.com/books/5-8459-1052-8.html.

Автор: FREEDEV 11.7.2007, 22:54
Цитата(tol05 @  11.7.2007,  21:42 Найти цитируемый пост)
как именно создал? Через студию?

Да конечно через студию, по пунктам завтра гляну. помойму все совпадает

Цитата(mr.DUDA @  11.7.2007,  21:43 Найти цитируемый пост)
Ещё для COM+ можно создать инсталлятор, он сам установит компоненту. Подробнее - например тут.


Ентой книжки жаль под рукой нет :(
Инсталлятор создавал с помощью проги для создания сетупов,
так же можно создать msi файл экспортировав приложение с компонентом из mmc.
но все эти варианты при попытке установки на другой машине приводят к той же ошибке 

Автор: FREEDEV 12.7.2007, 10:19
такс...
прошелся по пунктам все соблюдено. Вот только вместо gacutil.exe удобне будет использовать оснастку .NET Framework 2.0 Configuration
она позвляет просмотреть все сборки , добавить/удалиь их. Но если компонент добавляется в "службе компонентов" он автоматически появляется и в GAC. т.е. о глобальном кеше мне вообще заботиться не нужно.
Использовал msi на еще одной машине, все заработало! Видимо какой-то баг фрэймворка.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)