2009-04-02 11 views

Antwort

4

Was ich normalerweise getan habe (und tun würde, wenn ich das noch einmal benötigte), versuche eine Objektinstanz einer Klasse zu erstellen, von der man weiß, dass sie in der COM-Bibliothek ist - entweder durch ProgID oder GUID - und auf Fehler prüft.

+0

Sollte robuster sein als Registry-Scans und Erkennung einer fehlerhaften Installation. Das hängt davon ab, ob das Laden der DLL oder das Erstellen des Objekts teuer ist. –

+0

Rechts. Wahrscheinlich am besten versuchen, eine "geeignete" Klasse aus der Bibliothek zu verwenden. Und ich schätze, es gäbe keine Notwendigkeit zu überprüfen, ob die COM-Bibliothek installiert ist, wenn Sie nicht planen, zumindest etwas mit der Bibliothek zu tun, also ist es normalerweise kein Problem, sie zu laden, um nach der Installation zu suchen ... – peSHIr

0

Versuchen Sie es zu erstellen, und behandeln Sie den Fehler, wenn nicht.

unter Win32 CoCreateInstance wird REGDB_E_CLASSNOTREG zurück, wenn nicht installiert ist (einschließlich, IIRC, registriert, wenn aber die dll/exe es Implementierung wird dann gelöscht).

Unter .NET die generierte COM-Interop-Assembly wird einige Fehler (müssen dies überprüfen, haben keine bequemen Code, um für welche Ausnahme Typ zu testen). Hinweis. Wenn die Interop-Assembly fehlt, wird diese als fehlende Assembly behandelt, was möglicherweise zu einem Anwendungsladefehler führt.

Verwandte Themen