Esiste un modo programmatico in C# per determinare se è stata installata una particolare DLL COM? O si tratta di eseguire la scansione del registro per il classId?Determina se una libreria COM (.DLL) è installata
risposta
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.
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.
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ò. –
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