2009-04-02 9 views

Odpowiedz

4

To, co zwykle robiłem (i robiłbym, gdybym potrzebował tego ponownie), to próba stworzenia instancji obiektu klasy, o której wiesz, że jest w bibliotece COM - albo przez ProgID, albo GUID - i sprawdzania awarii.

+0

Powinny być bardziej niezawodne niż skanowanie rejestru, a także wykrycie złej instalacji. Zależy jednak od tego, czy ładowanie biblioteki DLL lub tworzenie obiektu jest kosztowne. –

+0

Dobrze. Prawdopodobnie najlepiej spróbować użyć "odpowiedniej" klasy z biblioteki. I zgaduję, że nie byłoby potrzeby sprawdzania, czy biblioteka COM jest zainstalowana, jeśli nie planujesz zrobić co najmniej z biblioteką, więc ładowanie jej w celu sprawdzenia instalacji zwykle nie stanowi problemu ... – peSHIr

0

Spróbuj go utworzyć i obsłuż błąd, jeśli nie.

Pod Win32 CoCreateInstance zwróci REGDB_E_CLASSNOTREG, jeśli nie jest zainstalowany (w tym, IIRC, jeśli jest zarejestrowany, ale dll/exe to jest następnie usuwane).

Pod .NET wygenerowany zespół COM Interop rzuci pewien błąd (trzeba to sprawdzić, nie ma wygodnego kodu do sprawdzenia, dla którego typu wyjątku). Uwaga. jeśli brakuje zespołu współdz., będzie on traktowany jako brakujący zespół, co może prowadzić do błędu ładowania aplikacji.