Автоматическая регистрация серверов из своей программы
Удобно в своей программе автоматически регистрировать все необходимые серверы. Это можно сделать при помощи следующей процедуры:
procedure CheckComServerInstalled(const CLSID: TGUID; const DllName: String);
var
Size: Integer;
DllHandle: THandle;
FileName: String;
begin
Size := MAX_PATH;
SetLength(FileName, Size);
try
if RegQueryValue(HKEY_CLASSES_ROOT,
PChar(Format('CLSID\%s\InProcServer32',
[GUIDToString(CLSID)])), PChar(FileName), Size) = ERROR_SUCCESS then
begin
SetLength(FileName, Size);
DllHandle := LoadLibrary(PChar(FileName));
FreeLibrary(DllHandle);
if DllHandle = 0 then begin
RegDeleteKey(HKEY_CLASSES_ROOT,
PChar(Format('CLSID\%s',[GUIDToString(CLSID)])));
RegisterComServer(DllName);
end;
end else begin
RegisterComServer(DllName);
end;
except
raise Exception.CreateFmt('Не могу зарегистрировать %s.', [DllName]); end;
end; |
В процедуре осуществляется дополнительная проверка наличия на диске файла с зарегистрированным сервером. Если файл не найден по указанному в реестре месту – данные о регистрации удаляются и предпринимается попытка зарегистрировать сервер заново. Такая проверка очень полезна при переносе DLL с сервером в другую папку на диске.