|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
Всем доброго дня, есть функция в которой проходит регистрация различных DLL. С диска считывается список файлов с расширением DLL и далее програма перебирает этот список. В зависимости от заданного ключа программы производится регистрация в ветке HKEY_LOCAL_MACHINE (глобально) или для текущего пользователя в HKEY_CURRENT_USER. При регистрации в HKEY_LOCAL_MACHINE программа проверяет наличие у dll экспортированной функции DllRegisterServer и вызывает её (при этом программа запущена под админом). При регистрации в HKEY_CURRENT_USER программа работает без прав администратора и единственная возможность передать параметры в регистрируемую dll и сказать что регистрация происходит локально это использовать DllInstall в регистрируемой dll. Поскольку DllInstall присутствует не во всех dll то после проверки наличия DllInstall при её отсутствии используется TRegSvr.exe с ключами /t /c /q (t- регистрация как TypeLib, c - для текущего пользователя и q - без вывода сообщений) если это TypeLib и с ключами /c /q если это Com если функция присутствует. Проблема заключается в том, что встречаются и com dll без функции DllInstall и вызывая для них TRegSvr.exe /t /c /q мы заносим их в реестр просто как TypeLib. Вопрос, чем это грозит при условии что все dll находятся в папке из которой запускается программа? И дополнительно, можно как то ещё определить что эту dll нужно регистрировать как com кроме как проверить наличие DllInstall? п.з. по идее, если я правильно понимаю, запуск регистрации в ветку HKEY_CURRENT_USER для текущего пользователя, которая не требует прав администратора возможен только через вызов в регистриеруемой dll экспортированной функции DllInstall т.к. она единственная принимает параметры в которых можно передать что это регистрация на текущего пользователя. Либо нужно самому писать в реестр все записи которые необходимые при регистрации вытаскивая из PE dll требуемые IDs и прочие параметры. Поправьте меня пожалуйста если я где то неправ. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 16:08 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
hlopotunможно как то ещё определить что эту dll нужно регистрировать как com кроме как проверить наличие DllInstall? Спросить у её автора. Обычно библиотекам вообще никакая регистрация не нужна. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 16:15 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
hlopotun вытаскивая из PE dll требуемые IDs и прочие параметры Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85.
А когда-то вообще писал так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 16:33 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hlopotunможно как то ещё определить что эту dll нужно регистрировать как com кроме как проверить наличие DllInstall? Спросить у её автора. Обычно библиотекам вообще никакая регистрация не нужна. те dll которым регистрация нужна (которые пихают в реестр свои дополнительные параметры через DllRegisterServer при регистрации) я в принципе подправил, добавил DllInstall и логику выбора ветки регистрации через TComServerObject.PerUserRegistration и они регистрируются корректно и параметры пишутся в правильную ветку. Но количество остальных dll зашкаливает, поэтому те, где DllRegisterServer не переопределяется (значит ничего своего при регистрации в реестр не пишется) трогать не стал. Слишком много правок плюс перешли сейчас с cvs на gitlab хаоса хватает и без этих правок. Переварить бы это всё сначала а потом уж кардинально всё менять. п.с. я в принципе склоняюсь тоже к тому что поскольку всё лежит в одной папке то должно работать, но хотелось бы по возможности сделать всё максимально правильно. Основная идея была избавить админов от ввода паролей на рабочих станциях при инсталляции клиентов. Сначала написал сервис который регистрировался на клиенте и работал под правами позволяющими регистрировать компоненты, и в принципе всё заработало но вылезли проблемы с правами в доменах при регистрации сервиса из сети на windows 8 (до тестирования на windows 7 не дошли поскольку время поджимало, решили переписать просто через регистрацию на пользователя). Вроде получилось проще чем с сервисом и надёжнее с точки зрения зоопарка компов у клиентов но работа ещё не окончена. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 16:40 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
hlopotunкоторые пихают в реестр свои дополнительные параметры через DllRegisterServer при регистрации Ещё раз, медленно: это нужно только для работы совсем сторонних приложений чтобы СОМ-объекты создавались по UUID или имени. Твоё приложение совсем не стороннее и способно создавать объекты прямо вызывая Factory конкретной библиотеки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 16:45 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
_Vasilisk_ .......... И что вы собрались вытаскивать? Я имел ввиду если писать в реестр внешней программой производящей регистрацию не вызывая встроенные в dll DllRegisterServer, DllInstall итп ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 16:46 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
hlopotunЯ имел ввиду если писать в реестр внешней программой производящей регистрацию не вызывая встроенные в dll DllRegisterServer, DllInstall итп Таких программ не существует в природе. RegSvr просто вызывает эти функции. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 16:48 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hlopotunЯ имел ввиду если писать в реестр внешней программой производящей регистрацию не вызывая встроенные в dll DllRegisterServer, DllInstall итп Таких программ не существует в природе. RegSvr просто вызывает эти функции. да, об этом можно догадаться читая сообщения от tregsrv или от regsvr32. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 16:51 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
hlopotunда, об этом можно догадаться И что помешало тебе это сделать?.. hlopotunя в принципе подправил, добавил DllInstall и логику выбора ветки регистрации Если у тебя есть их исходники, которые ты можешь править, ты уже сто лет назад мог их подключить прямо к проекту, избавившись от необходимости регистрации раз и навсегда. Прокрастинуешь как обычно... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 17:00 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov .......... Твоё приложение совсем не стороннее и способно создавать объекты прямо вызывая Factory конкретной библиотеки. Прошу прощения за тупость/назойливость но хочу быть уверен: и это происходит автоматически если библиотека лежит в одной папке с программой? Или это требует дополнительных манипуляций в коде при вызове/подключении? п.с. если у кого то есть интересные ссылки где можно почитать об автоматизме при вызове библиотек поделитесь пожалуйста. Вроде что нашел уже прочитал но чувство 100й уверенности не приходит :( ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 17:14 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hlopotunда, об этом можно догадаться И что помешало тебе это сделать?.. hlopotunя в принципе подправил, добавил DllInstall и логику выбора ветки регистрации Если у тебя есть их исходники, которые ты можешь править, ты уже сто лет назад мог их подключить прямо к проекту, избавившись от необходимости регистрации раз и навсегда. Прокрастинуешь как обычно... слишком много проектов построенных на этих dll, к 90% из которых никогда ренее не прикасался (не говоря уже о понимании их бизнес логики), просто утону .... да и правка каждого проекта влечёт привлечение ресурсов на тестирование , просто не переварим всё в отведённые сроки. Приходится искать компромиссы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 17:22 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
hlopotun слишком много проектов построенных на этих dll, к 90% из которых никогда ренее не прикасался (не говоря уже о понимании их бизнес логики), просто утону .... да и правка каждого проекта влечёт привлечение ресурсов на тестирование , просто не переварим всё в отведённые сроки. Приходится искать компромиссы. Регистрация dll - зло. Тебе уже сказали, что самим dll эта регистрация не нужна, достаточно положить её рядом к exe. После чего найти регистрацию этой dll в реестре, перейти по указанному пути (перестраховываюсь) и сделать regsvr32.exe /u shitlibname.dll ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 17:59 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
LocksmithPC, не получится наверное, посмотрел в коде некоторых проектов, там всё через Result := CreateComObject (ClassID); т.е. через ClassID а это через реестр только. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 19:23 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
hlopotun LocksmithPC, не получится наверное, посмотрел в коде некоторых проектов, там всё через Result := CreateComObject (ClassID); т.е. через ClassID а это через реестр только. Откуда берется ClassID? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 19:35 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
Search And Replace этих вызовов на прямое Result := ClassID.Create() - совершенно непосильная задача для некоторых, понимаю... Извращаться уже полгода с регистрацией гораздо проще, конечно же... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 19:36 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
hlopotun Result := CreateComObject (ClassID); Код: pascal 1.
и никакой регистрации ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2021, 19:53 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
_Vasilisk_ hlopotun Result := CreateComObject (ClassID); Код: pascal 1.
и никакой регистрации ну, с регистрацией пока всё получается. При таком количестве зависимых проектов кардинально менять логику опасно. Иду по коду, при необходимости либы подправляю. Последний затык был с FastMM4, при его наличии в uses regsvr32 вываливал что модуль не найден и загружен быть не может (причём без указания какой модуль). Посмотрел зависимости у dll, помимо прочих там ссылка на c:\windows\system32\FastMM_FullDebugMode.dll непонятно почему ругалось т.к. либа со всеми остальными системными лежит рядом в windows\system32. Убрал FastMM4 из зависимостей всё стало регистрироваться. Можно ещё попробовать прописать включение fullldebug mode только в режиме отладки. Непонятно только почему он блокировал загрузку dll при регистрации (даже при запуске из под админа). Но поскольку FastMM4 тут не критичен, пока просто его выпилил. Будет время разберёмся в чём причина. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2021, 12:01 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
hlopotun ну, с регистрацией пока всё получается hlopotun либа со всеми остальными системными лежит рядом в windows\ system32 . ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2021, 12:59 |
|
Определение возможного типа регистрации dll
|
|||
---|---|---|---|
#18+
_Vasilisk_ hlopotun ну, с регистрацией пока всё получается hlopotun либа со всеми остальными системными лежит рядом в windows\ system32 . Спасибо за наводку! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2021, 13:12 |
|
|
start [/forum/topic.php?fid=58&msg=40118445&tid=2036800]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 288ms |
0 / 0 |