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