Для проверки наличия на компьютере зарегистрированных com-объектов (например, MS Word'а или MS Html) использую такие функции:
function IsExistComClass(aClassID :TCLSID) :boolean;
var wProgId :PWideChar;
begin
Result := Succeeded( ProgIDFromCLSID( aClassID, wProgId) );
CoTaskMemFree(wProgId);
end;
function IsExistComProgId(aProgId :string) :boolean;
var wClassID :TCLSID;
begin
Result := Succeeded(CLSIDFromProgID(PWideChar(WideString(aProgId)), wClassID));
end;
Эти функции подсмотрены в D7 VCL ClassIDToProgID() и ProgIDToClassID(). Насколько я понимаю они обращаются к реестру, чтобы проверить регистрацию com-объекта.
Использую их так:
if IsExistComProgId('Word.Application')
then ... ;
if IsExistComClass(Class_HTMLDocument)
then ... ;
Вопрос. Достаточно ли такой проверки, чтобы достоверно определить, что на компьютере установлен тот или иной com-объект? Или же для этого необходимо что-то иное. Например, в защищённом блоке создать и удалить пробный com-объект с помощью CreateComObject() или CreateOleObject()?