Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2011, 17:18   #1
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию Регистрация COM-библиотеки

Такая ситуация. В своей программе использую дополнительную dll библиотеку (она прописывается в uses). Если она установлена на компьютере пользователя этой программы, все работает. Если ее нет, то программа отказывается запускаться, выскакивает ошибка и программа закрывается.
Программа заработает если самостоятельно добавить эту библиотеку (regsvr32 IntCOM.dll)

Подскажите пожалуйста в delphi как-то можно автоматически если ее нет то добавить эту библиотеку перед включением программы?

Пробовал в FormCreate добавлять
WinExec('regsvr32 /s IntCOM.dll', SW_HIDE);
Не помогло.
celovec вне форума Ответить с цитированием
Старый 24.07.2011, 17:57   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

1/ dspsdfnm aeyrwbb lbyfvbxtcrb
2/ проверять наличие обьектов до создания TApplication т.е. в DPR
Человек_Борща вне форума Ответить с цитированием
Старый 24.07.2011, 18:15   #3
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

Тоесть в .dpr после begin положить
Код:
WinExec('regsvr32 /s IntCOM.dll', SW_HIDE);
Хорошо. Но целесообразно ли каждый раз перед запуском устанавливать dll, как сделать проверку, если dll уже установлен то ничего не делать?
celovec вне форума Ответить с цитированием
Старый 24.07.2011, 18:37   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

для начала, почитайте это http://sprvka.ru/r/regsvr32.htm

Как вариант в dpr:
1. проверяем наличие dll вообще
2. Удаляем регистрацию
3. устанавливаем регистрацию.

все.

А вообще, пишите тестовое прижение, и вооружаемся RegShot, смотрим куда пишется регистрация этой dll. И отукуда она удаляется. Ну а потом напишите проверку наличия этого(их) ключа(ей) в реесте. И в соответствии с выводами вашей функции проверки, сделаете нужное действие. Естественно нужно будет учесть и систему в котрой будет работать ПО. 7 от XP отличается.
Человек_Борща вне форума Ответить с цитированием
Старый 24.07.2011, 19:32   #5
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

Спасибо. С этим разобрался.
Появился еще 1 вопрос. Подскажите как в:
Код:
WinExec('regsvr32 /s IntCOM.dll', SW_HIDE);
сделать условие: когда закончилась установка IntCOM.dl то делаем beep;
Спасибо.
celovec вне форума Ответить с цитированием
Старый 24.07.2011, 19:49   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

запускаете regsvr32 через Createprocess с нужными параметрами, получаете hProcess далее при помощи WaitForSinglebject(hProcess,INFINIT E) <> 0 ждёте пака завершиься процесс.
Человек_Борща вне форума Ответить с цитированием
Старый 24.07.2011, 20:54   #7
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

Звучит очень сложно. Хорошо попробую спасибо.
celovec вне форума Ответить с цитированием
Старый 24.07.2011, 20:57   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

ищите "delphi запуск процесса с ожиданием его завершения"
Человек_Борща вне форума Ответить с цитированием
Старый 25.07.2011, 15:55   #9
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

А чем плохо это?

LoadLibrary
FreeLibrary
Баламут вне форума Ответить с цитированием
Старый 25.07.2011, 16:21   #10
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

LoadLibrary
DllRegisterServer := GetProcAddress(..., 'DllRegisterServer')
CoInitialize
DllRegisterServer

(либа полезет в ветку HKLM, соответвтенно под вистой/семёркой потребуется requireAdministrator в манифесте)
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависимость библиотеки от библиотеки ds.Dante C# (си шарп) 2 07.07.2011 12:55
excel 2007, Регистрация библиотеки от excel 2003 maksim_serg Microsoft Office Excel 1 12.01.2011 14:05
Регистрация пользователя на Jabber сервере с использованием библиотеки IP*Works(XMPP протокол) AndreyK Работа с сетью в Delphi 0 06.10.2010 20:51