Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Автоматическая регистрация серверов из своей программы

01.01.2007

Удобно в своей программе автоматически регистрировать все необходимые серверы. Это можно сделать при помощи следующей процедуры:

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 с сервером в другую папку на диске.