2009-04-02 14 views

risposta

4

Quello che ho fatto di solito (e che farebbe, se avessi bisogno di nuovo) è provare a creare un'istanza di oggetto di una classe che si conosce nella libreria COM, sia da ProgID o GUID, e controllando l'errore.

+0

Dovrebbe essere più robusto della scansione del registro, oltre al rilevamento di una cattiva installazione. Dipende se il caricamento della DLL o la creazione dell'oggetto è costoso, però. –

+0

Giusto. Probabilmente è meglio provare e usare una classe "adatta" dalla libreria. E suppongo che non ci sia bisogno di controllare se la libreria COM è installata se non si intende fare almeno qualcosa con la libreria, quindi il caricamento per verificare l'installazione di solito non crea problemi ... – peSHIr

0

Provare e crearlo e gestire l'errore in caso contrario.

In Win32 CoCreateInstance restituirà REGDB_E_CLASSNOTREG se non installato (incluso, IIRC, se registrato ma il dll/exe che lo implementa viene quindi eliminato).

Sotto .NET l'assembly di interoperabilità COM generato genera alcuni errori (è necessario verificare ciò, non disporre di codice conveniente per verificare per quale tipo di eccezione). Nota. se manca l'assembly di interoperabilità, verrà trattato come assembly mancante che potrebbe causare un errore di caricamento dell'applicazione.

Problemi correlati