Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];

Вниз

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

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

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


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

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


 
S   (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)


 
S   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.035 c
1-92590
antonioxxx
2002-10-15 20:05
2002.10.28
Packages в Delphi


8-92615
Avenger
2002-07-01 19:28
2002.10.28
Как изменить громкость звука?


7-92773
Mashinist
2002-08-16 10:34
2002.10.28
Фай по модему


1-92592
jen_bond
2002-10-17 08:52
2002.10.28
MainMenu 2000/Xp


7-92758
Igorka
2002-08-23 11:22
2002.10.28
NT Service





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский