Mit folgender Funktion geht das etwas eleganter:
Delphi-Quellcode:
function ProgIDExists(const ProgID:WideString):Boolean;
var
tmp : TGUID;
begin
Result := Succeeded(CLSIDFromProgID(PWideChar(ProgID), tmp));
end;
Damit wird kein Objekt erzeugt, dass man dann trotzdem nicht haben möchte.
Letztendlich macht CLSIDFromProgID nichts anderes, als in die Registry zu schauen; aber eben auf dem offiziellen Weg.
Delphi-Quellcode:
if ProgIDExists('Msxml2.DOMDocument.6.0') then
result := 6
else if ProgIDExists('Msxml2.DOMDocument.5.0') then
...
Zu den ProgIDs siehe: http://
msdn.microsoft.com/en-us/library/ms757837(VS.85).aspx