Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.28;
Скачать: CL | DM;

Вниз

Регистрация dll   Найти похожие ветки 

 
©   (2002-10-18 09:07) [0]

Подскажите как программно зарегистрировать dll? И определить зарегистрировалась ли она?


 
Poirot ©   (2002-10-18 09:23) [1]

А что из себя у тебя представляет длл... если просто набор функций - регить необязательно, ну типпа рег - это запись её как шаред длл и инкримент счётчика, а если это COM тоды RTFM


 
©   (2002-10-18 09:31) [2]

Это arctivX сервер автоматизации. Можно зарегистрировать путем виндов (regsvr *.dll), но это не красиво и потом нельзя проверить если она уже была инсталирована в систему.


 
Digitman ©   (2002-10-18 09:41) [3]

>S


> Можно зарегистрировать путем виндов (regsvr *.dll), но это
> не красиво


Почему некрасиво ? Если это можно сделать не только "вручную", но и программно ?
regsvr32.exe - обычное приложение, его можно программно стартовать любым удобным способом, передав в кач-ве параметра имя регистрируемой ActiveX DLL


> нельзя проверить если она уже была инсталирована в систему


Почему же нельзя ? Достаточно просканировать реестр на предмет наличия записей о регистрации интересующей фабрики класса (при нахождении заодно и сравнить имя/путь файла, фигурирующего в default-параметре ключа InProcServer)


 
©   (2002-10-18 09:53) [4]

То: Digitman
Если вас не затруднит не моглибы Вы написать часть кода? По поводу поиска в реестре.


 
han_malign ©   (2002-10-18 09:57) [5]

regsvr - просто вызывает функцию DLL
STDAPI DllRegisterServer(void)
которая прописывает в реестр все необходимые ключи(собственно регистрируется)
З.Ы. Соответственно STDAPI DllUnregisterServer(void)


 
Digitman ©   (2002-10-18 10:10) [6]

>S

Пример есть в Делфи-демо-проекте BSS (scktsrvr.dpr)


 
han_malign ©   (2002-10-18 11:02) [7]

примерно так(работоспособность не проверял)
sCLSID - CLSID сервера
function ServerRegistered(sCLSID: TGUID; aFullDLLPath: string): boolean;
var _h: HKEY;
_s,sKey: string;
chValue: array[0..MAX_PATH]of char;
dwType,dwSize: dword;
begin
sKey:="CLSID\"+GuidToString(sCLSID)+"\InprocServer32";
Result:=(RegOpenKeyEx(HKEY_CLASSES_ROOT,PChar(sKey),0,KEY_READ,_h)
=ERROR_SUCCESS)and
((_h<>0)and(_h<>INVALID_HANDLE_VALUE));
//по идее достаточно - ключ есть иладно
if(not Result)then exit;
dwType:=REG_SZ; dwSize:=sizeof(chValue);
//Значение (default), путь к DLL
Result:=(RegQueryValueEx(_h,"",nil,@dwType,PByte(@chValue),@dwSize)
=ERROR_SUCCESS)and(dwSize<>0);
if(Result)then begin
SetString(_s,chValue,dwSize);
Result:=(UpperCase(aFullDLLPath)=UpperCase(_s));
if(Result)then begin
dwType:=REG_SZ; dwSize:=sizeof(chValue);
//Значение ThreadingModel, обычно "Apartment"
Result:=(RegQueryValueEx(_h,"ThreadingModel",nil,@dwType,PByte(@chValue),@dwSize)
=ERROR_SUCCESS)and(dwSize<>0);
if(not Result)then exit;
SetString(_s,chValue,dwSize);
Result:=_s="Apartment";
end;
end;
RegCloseKey(_h);
end;



Страницы: 1 вся ветка

Текущий архив: 2002.10.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
1-92570
3d
2002-10-16 20:58
2002.10.28
Народ, нужна помощь с NMSMTP.


6-92633
Виктор Сердюков
2002-08-28 12:16
2002.10.28
SendMessage в COM обьектах !


6-92635
Akni
2002-08-27 22:53
2002.10.28
Sockets


7-92752
alexsandri
2002-08-16 20:00
2002.10.28
» используя меню вызываемое посредством нажатия F8 при загрузке


14-92689
Anatoly Podgoretsky
2002-10-06 12:01
2002.10.28
Наташенька (nata610@pisem.net) с днем рождения