Переключение на Главную Страницу Страницы: 1 ... 12 13 [14]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Ошибка при создании объекта из компоненты (число прочтений - 164992 )
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #195 - 24. Октября 2007 :: 16:39
Печать  
Продолжаем анализ экскрементов.

При загрузке под ХР.
   Независимо от того, с какими правами грузится компонента, она регистрирует как ProgID и CLSID, так и Typelib в HKCU. После чего нормально грузится.

При загрузке под Вистой.

Если 1С запускается под обычным пользователем, либо не от имени администратора. То компонента нормально регистрирует ProgID и CLSID в HKCU, но при попытке зарегистрировать TypeLib происходит следующее:
Цитата:
Operation:      RegOpenKey
Result:      NAME NOT FOUND
Path:      HKCU\Software\Classes\TypeLib\{3A5F0172-87E1-4AB6-BE86-39066F6E0AB9}
Desired Access:      Maximum Allowed

Operation:      RegOpenKey
Result:      NAME NOT FOUND
Path:      HKCR\TypeLib\{3A5F0172-87E1-4AB6-BE86-39066F6E0AB9}
Desired Access:      Maximum Allowed

Operation:      RegOpenKey
Result:      ACCESS DENIED
Path:      HKCR\TypeLib\{3A5F0172-87E1-4AB6-BE86-39066F6E0AB9}
Desired Access:      Maximum Allowed

То есть регистрация Typelib обламывается, но далее все нормально загружается, не смотря на TypeLib. Причем нормально загружается, даже если Typelib уже зарегистрирован.

Если же 1С запускать от имени администратора, то компонента регистрируется в HKCU, но Typelib, почему то, регистрируется в HKLM. А при загрузке возникает обычное сообщение "отсутствует интерфейс IInitDone". ПРИЧЕМ! Если компонента зарегистрирована как в HKCU, так и в HKLM, то она грузится нормально. (См. код ниже.)

Если же не выполнять регистрацию Typelib, то возникает та же ошибка: "отсутствует интерфейс IInitDone".

Короче, сейчас катит такой вариант:
Код
Выбрать все
STDAPI DllRegisterServer(void)
{
	// registers object, typelib and all interfaces in typelib

	HRESULT hr = _Module.RegisterServer(TRUE);
	MessageBox("Регистрация сервера = %ld", hr);
	RedirectHKCR(TRUE);
	hr = _Module.RegisterServer(TRUE);
	MessageBox("Регистрация сервера = %ld", hr);
	RedirectHKCR(FALSE);
	return hr;
} 


Но как он поведет себя в многопользовательской среде с разными версиями 1С++ - не знаю.

Михаил, жду от тебя разъяснений анализа экскрементов.  Подмигивание
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #196 - 24. Октября 2007 :: 17:46
Печать  
Похоже, виста не спешит искать регистрацию компонент в HCKU ветке текущего пользователя.
Может, вернуть для висты стандартную регистрацию в HKLM?
Что там говорит Бек по поводу решения проблем по мере поступления?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #197 - 24. Октября 2007 :: 17:49
Печать  
Еще один вариант:
Код
Выбрать все
STDAPI DllRegisterServer(void)
{
	// registers object, typelib and all interfaces in typelib

	HRESULT hr = _Module.RegisterServer(TRUE);
	MessageBox("Регистрация сервера = %ld", hr);
	bHKLM_IsOK = (hr == 0);
	if (bHKLM_IsOК)
		return hr;

	RedirectHKCR(TRUE);
	hr = _Module.RegisterServer(FALSE);
	MessageBox("Регистрация сервера = %ld", hr);
	RedirectHKCR(FALSE);
	return hr;
} 



Также bHKLM_IsOk можно учесть и в RedirectHKCR().

Получается нескольо красивее, но ничем не лучше при работе в многопользовательской среде.
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #198 - 24. Октября 2007 :: 18:03
Печать  
kms писал(а) 24. Октября 2007 :: 17:46:
Похоже, виста не спешит искать регистрацию компонент в HCKU ветке текущего пользователя.
Может, вернуть для висты стандартную регистрацию в HKLM?
Что там говорит Бек по поводу решения проблем по мере поступления?

Если следовать Беку, то стоит подождать, когда выйдет первый сервис-пак.  Улыбка А пока дать рекомендации работать со включенным UAC-ом.

И точно, Typelib, похоже, ни при чем. И чего я к нему привязался? Улыбка Но что это значит? Если ты админ, то для тебя HKCU\Classes не действует?

Ну тогда Typelib я отключу. Да, кстати, это же ты сказал, что Typelib - часть проблемы с Вистой.  Улыбка
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #199 - 26. Октября 2007 :: 12:02
Печать  
К сожалению, последний приведенный код (пост 197) не катит. Зато работает код из поста 195. Но выглядит он, как видите, странно.

Сейчас залит код № 195. Какие будут предложения?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #200 - 26. Октября 2007 :: 12:48
Печать  
Объясните, пжлст, непосвещённому: а так АктивИкс-ы можно регистрировать?
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #201 - 26. Октября 2007 :: 13:23
Печать  
JohnyDeath писал(а) 26. Октября 2007 :: 12:48:
Объясните, пжлст, непосвещённому: а так АктивИкс-ы можно регистрировать?

ага, для меня это тоже проблема...
  
Наверх
 
IP записан
 
Voland
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 1
Зарегистрирован: 08. Августа 2008
Re: Ошибка при создании объекта из компоненты
Ответ #202 - 08. Августа 2008 :: 10:40
Печать  
Люди делается все просто, запускаешь 1С под админом чтобы она подгружала компоненту. Далее выходишь и для всех пользователей этой машины не под админом будет работать компонента. Проверено!
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #203 - 08. Августа 2008 :: 10:45
Печать  
Voland писал(а) 08. Августа 2008 :: 10:40:
Люди делается все просто, запускаешь 1С под админом чтобы она подгружала компоненту. Далее выходишь и для всех пользователей этой машины не под админом будет работать компонента. Проверено!

Пришел самый умный чел и всем все объяснил Печаль
Товарищ, почитай ветку с начала и поймешь, что эту прописную истину все знают.
Здесь речь как раз о регистрации ВК для пользователей с ограниченными правами Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Ошибка при создании объекта из компоненты
Ответ #204 - 26. Января 2009 :: 11:29
Печать  
2.5.0.7 Опять на одном компе(XP) выскочила эта ошибка.
Выяснилось что в машине был сбой накануне.
Ручная чистка реестра не помогла.

Перезалили профиль  - ошибка исчезла. Но все равно странно - был уверен что "проблема решена"  Озадачен
  
Наверх
 
IP записан
 
quick
Junior Member
**
Отсутствует


LinuxMint, python, CodeTyphon

Сообщений: 83
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #205 - 11. Февраля 2013 :: 20:25
Печать  
Может немного оступление от обсуждения, в общем пишу сейчас компоненту на делфи. И тоже возникла ошибка с clsid. После долгих мытарств с virtualbox и откатом на чистый реестр, а так же его diff-ом нашел проблему.
Ветка HKLM\Software\Classes\ .. здесь у меня AddIn.Steep1
Которое регается путем
Код
Выбрать все
TComObjectFactory.Create(ComServer, TAddInSteep, Class_AddInSteep, 'Steep1','', ciMultiInstance, tmApartment);
 


Так вот вся задница была с тем что надо вместо Steep1 было сделать AddInSteep, т.е. имя класса.
Код
Выбрать все
TComObjectFactory.Create(ComServer, TAddInSteep, Class_AddInSteep, 'AddInSteep','', ciMultiInstance, tmApartment);
 


Иначе мучает что не найден CLSID.
А для регистрации в HKCU накопал такую вещь
Код
Выбрать все
...
exports
  DllGetClassObject,
  DllCanUnloadNow,
  DllRegisterServer,
  DllUnregisterServer;
begin
  ComServer.PerUserRegistration := True;
end.
 


Проверено под правами обычного пользователя - работает!

P.S. Просьба модератору удалить мое сообщение если оно вам бесполезно. Просто хотел помочь, может наведет на какие мысли.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 12 13 [14] 
ОтправитьПечать