Как определить, какая DLL зарегистрирована?

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Как определить, какая DLL зарегистрирована?

Сообщение brigval » 05.12.2006 (Вт) 7:48

Как определить, какая DLL зарегистрирована?
У пользователия могут оставаться файлы программы предыдущих версий. Как определить, что зарегистрирована DLL, скажем, из соседней папки, а не DLL из папки с текущей версией программы?
brigval

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 05.12.2006 (Вт) 7:53

Зачем определять? Регистрируй "поверх" - и все :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 05.12.2006 (Вт) 10:22

Лучше сначала разрегистрируй старую на случай несовместимости с новой.
Лучший способ понять что-то самому — объяснить это другому.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 05.12.2006 (Вт) 10:28

Nicky
Вот из-за таких и возник DLL HELL.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 05.12.2006 (Вт) 10:33

FaKk2 писал(а):Nicky
Вот из-за таких и возник DLL HELL.

Nicky писал(а):Зачем определять?
Это была главная мысль

Nicky писал(а):Регистрируй "поверх" - и все :)
Смайл видишь?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Как определить, какая DLL зарегистрирована?

Сообщение Andrey Fedorov » 05.12.2006 (Вт) 11:10

brigval писал(а):Как определить, какая DLL зарегистрирована?


Зная ее GUID:

Set tlb = New TLI.TypeLibInfo
tlb.LoadRegTypeLib sGUID, -1, -1, -1

После этого в свойствах tlb ты будешь иметь путь к файлу DLL-ки, ее версию и т.д. Далее можешь сравнить с данными нужной и если версия старая - копировать и пр.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 05.12.2006 (Вт) 11:46

Nicky писал(а):Зачем определять? Регистрируй "поверх" - и все :)

Не всегда регистрирутся. Собственно, по этому и возник вопрос.

Antonariy писал(а):Лучше сначала разрегистрируй старую на случай несовместимости с новой.

Для этого надо знать путь к старой DLL, который, в общем случае, не известен.



Andrey Fedorov, а GUID как можно узнать?
brigval

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 05.12.2006 (Вт) 11:54

brigval писал(а):Не всегда регистрирутся. Собственно, по этому и возник вопрос


Вообще то регистрируются всегда, но надо при регистрации указывать полный путь, иначе может регистрироваться тот что система найдет первым по Path.

brigval писал(а):Andrey Fedorov, а GUID как можно узнать?


tlb.ContainingFile = sName

И далее смотришь tlb.GUID и пр.

Или срисовать его из vbp файла. Смотря что ты хочешь...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 05.12.2006 (Вт) 13:30

brigval писал(а):Для этого надо знать путь к старой DLL, который, в общем случае, не известен.

Для этого есть реестр. Самый простой (как мне кажется) способ определения пути:

Допустим есть progid MyLib.MyClass. Узнаем его CLSID из ветки HKEY_CLASSES_ROOT\MyLib.MyClass\Clsid, а на основании этого значения получаем путь к файлу - HKEY_CLASSES_ROOT\CLSID\{found clsid}\InprocServer32

И вся любовь.
Лучший способ понять что-то самому — объяснить это другому.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.12.2006 (Вт) 14:42

[nitpick]
DLL вполне может не регистрировать ни одного CLSID.
[/nitpick]
Изображение

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 08.12.2006 (Пт) 0:00

Antonariy писал(а):Допустим есть progid MyLib.MyClass. Узнаем его CLSID из ветки HKEY_CLASSES_ROOT\MyLib.MyClass\Clsid, а на основании этого значения получаем путь к файлу - HKEY_CLASSES_ROOT\CLSID\{found clsid}\InprocServer32
И вся любовь.


Мне подошел вариант Antonariy.
Всем большое спасибо.

Да. Программа моя не требует инсталяции, посколько она любительская.
С точки зрения теории обязательно ли по окончанию работы разрегистрировать DLL?
brigval

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 08.12.2006 (Пт) 10:33

Нет :)
Обязательно перед удалением библиотеки.
Лучший способ понять что-то самому — объяснить это другому.

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 08.12.2006 (Пт) 10:56

Antonariy писал(а):Нет :)
Обязательно перед удалением библиотеки.

Спасибо
brigval

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.06.2007 (Сб) 10:29

Antonariy писал(а):Нет :)
Обязательно перед удалением библиотеки.


Потому с стараюсь не ставить подобные поделки. Он тебе рабочую библиотеку разрегистрит и прибъет!
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList