Utworzono dodatek do pakietu Office w VS 2008, C#, .NET 3.5 i VSTO. Jest wdrażany za pośrednictwem ClickOnce. Formularz konfiguracji czasu wykonywania wykonuje regsvr32, aby zarejestrować "fooapi.dll" dołączony do projektu, który nie może zostać zarejestrowany podczas instalacji z powodu ograniczeń ClickOnce. Czy istnieje jakiś preferowany sposób sprawdzania i sprawdzania, czy "fooapi.dll" jest zarejestrowany podczas wykonywania w C#?Jak sprawdzić, czy dll COM jest zarejestrowany w C#
Odpowiedz
Wypróbuj metody Type.GetTypeFromCLSID lub Type.GetTypeFromProgID, aby szybko sprawdzić istnienie interfejsu COM.
Alternatywnie, po prostu wykonaj instancję obiektu i zatrzymaj wyjątek, np.
catch(COMException ex) {
if(ex.ErrorCode == -2147221164) {
// Retrieving the COM class factory for component with CLSID XXXX failed
}
}
UPDATE:
This overload wydaje się być jedynym, który faktycznie zwraca null
jeśli obiekt COM nie może być instancja.
Piękna z 'Type.GetTypeFromCLSID' jest to, że zawsze zwraca System .__ ComObject niezależnie od tego, czy CLSID jest poprawny – rpattabi
Myślę, że najprostszym sposobem jest próba utworzenia komponentu, który żyje w pliku fooapi.dll. Zawiń kod kreacji w bloku try/catch i wychwytuj wyjątek, który jest generowany, jeśli biblioteka DLL nie została poprawnie zarejestrowana. Jest to najpewniejszy sposób sprawdzenia poprawności rejestracji
Jeśli znasz identyfikator GUID DLL, możesz sprawdzić istnienie klucza rejestru w HKCU\SOFTWARE\Classes
.
Sprawdź obecność HKEY_CLASSES_ROOT\CLSID\{your_CLSID}
i odpowiednich wartości pod nim. Prawdopodobnie możesz uciec od szukania tylko wartości InprocServer32
i Codebase
, ale możesz też wyrazić zgodę na bardziej szczegółowe sprawdzenie.
Można także po prostu utworzyć instancję komponentu. Jeśli jednak zarówno składnik, jak i klient są C# i używasz new
, CLR może być w stanie znaleźć odpowiedni zestaw i załadować go przechodząc przez COM. (Tak, czasami może być tak sprytnie :-)). Powinieneś jawnie p/invoke do CoCreateInstance
Jeśli masz PROGID komponentu w bibliotece DLL, można spróbować coraz Typ:
System.Type.GetTypeFromProgID(string progID, bool throwOnError)
Jeśli masz System.Runtime.InteropServices.COMException
, oznacza to, że PROGID nie jest zarejestrowany.
- 1. Programowo ustalić, czy biblioteka COM (.DLL) jest zainstalowana
- 2. Tworzenie biblioteki DLL COM jest dostępne
- 3. Jak używać COM dll w moim programie C++
- 4. rejestracja com dll w wix
- 5. Różnica między tradycyjnym DLL DLL i COM
- 6. Rejestracja Free Com i manifestów dll
- 7. Jak ustalić, czy dostawca VFPOLEDB jest zainstalowany/zarejestrowany?
- 8. Używanie tlbexp.exe na dll COM
- 9. Debuguj C# dll z rozwiązania C++ przez COM
- 10. Co jest zaletą korzystania z COM w zwykłym DLL?
- 11. Wywołanie C# dll z niezarządzanej aplikacji C++ bez COM
- 12. Jak sprawdzić, czy plik jest plikiem EXE lub DLL?
- 13. Jak ustalić, czy DLL to COM lub .NET?
- 14. Rejestracja .NET COM DLL podczas Wix zainstalować
- 15. Jak zarejestrować DLL DLL napisane w języku C# z Regsvr32?
- 16. Jak korzystać z darmowej rejestracji Dll COM w kropce netto
- 17. Jak sprawdzić, czy jest konsola?
- 18. Załadować dll COM w czasie wykonywania?
- 19. Uwierzytelnianie DLL w C#
- 20. debugowanie bezpłatnej rejestracji COM (C++)
- 21. Określanie, czy ASP.Net jest poprawnie zarejestrowany
- 22. COM msado15.dll Program przestał działać
- 23. Jak sprawdzić, czy program ASP.NET 4 jest zarejestrowany do uruchomienia w IIS 7.5?
- 24. Jak mogę znaleźć w Visual C++, czy plik OCX (na przykład flash.ocx) jest zarejestrowany, czy nie?
- 25. Jak sprawdzić, czy dll używa ASLR, czy nie?
- 26. Czy COM + jest nadal zalecany?
- 27. Już zarejestrowany w/appname /: Model użytkownika jest już zarejestrowany
- 28. jak sprawdzić, czy podział jest zerowy w c
- 29. Jak sprawdzić, czy zakres Excela jest pusty w C#
- 30. Jak sprawdzić, czy katalog jest ukryty w C#?
Erm, Twoje nadzieje, że regsvr32 będzie w stanie zarejestrować, że serwer COM powinien być cienki. Wymaga uprawnień administratora. Użyj reg-free COM. –