Ich habe ein Office-Add-In in VS 2008, C#, .NET 3.5 und VSTO erstellt. Es wird über ClickOnce bereitgestellt. Ein Laufzeitkonfigurationsformular führt regsvr32 aus, um die im Projekt enthaltene Datei "fooapi.dll" zu registrieren, die aufgrund von ClickOnce-Einschränkungen nicht während der Installation registriert werden kann. Gibt es einen bevorzugten Weg zu überprüfen und zu sehen, ob "fooapi.dll" während der Laufzeit in C# registriert ist?Wie überprüfe ich, ob eine COM-DLL in C# registriert ist
Antwort
Versuchen Sie die Type.GetTypeFromCLSID oder Type.GetTypeFromProgID Methoden, um schnell für eine COM-Schnittstelle Existenz zu überprüfen.
Alternativ können Sie das Objekt auch instanziieren und die Ausnahme abfangen, z.
catch(COMException ex) {
if(ex.ErrorCode == -2147221164) {
// Retrieving the COM class factory for component with CLSID XXXX failed
}
}
UPDATE:
This overload scheint die einzige zu sein, die tatsächlich zurückgibt null
wenn das COM-Objekt nicht instanziiert werden kann.
Die Schönheit mit 'Type.GetTypeFromCLSID' ist, dass es System.__ ComObject immer zurückgibt, unabhängig davon, ob die CLSID gültig ist – rpattabi
Ich denke, der einfachste Weg ist zu versuchen, die Komponente zu erstellen, die in fooapi.dll lebt. Wickeln Sie den Erstellungscode in einen try/catch-Block und fangen Sie die Ausnahme ab, die generiert wird, wenn die DLL nicht ordnungsgemäß registriert ist. Dies ist der sicherste Weg, um auf korrekte Registrierung zu prüfen
Wenn Sie die DLLs GUID kennen, können Sie die Existenz des Registrierungsschlüssels in HKCU\SOFTWARE\Classes
überprüfen.
Überprüfen Sie das Vorhandensein von HKEY_CLASSES_ROOT\CLSID\{your_CLSID}
und die richtigen Werte darunter. Sie könnten wahrscheinlich nur nach den Werten InprocServer32
und Codebase
suchen, aber Sie können sich auch für eine ausführlichere Prüfung anmelden.
Sie können auch eine Instanz der Komponente erstellen. Wenn sowohl die Komponente als auch der Client C# sind und Sie new
verwenden, kann die CLR möglicherweise die richtige Assembly ermitteln und sie laden, indem sie COM durchläuft. (Ja, manchmal kann es so schlau sein :-)). Sie sollten explizit p/invoke auf CoCreateInstance
Wenn Sie die progID der Komponente in der DLL haben, können Sie versuchen, die Art bekommen:
System.Type.GetTypeFromProgID(string progID, bool throwOnError)
Wenn Sie System.Runtime.InteropServices.COMException
bekommen, bedeutet dies, dass die progID nicht registriert ist.
- 1. Wie überprüfe ich, ob ein Mobilgerät bereits registriert wurde?
- 2. Wie überprüfe ich, ob eine Umgebungsvariable in PHP gesetzt ist?
- 3. Wie überprüfe ich, ob eine Variable in Swift deklariert ist?
- 4. Wie überprüfe ich in Activiti, ob eine Variable gesetzt ist?
- 5. C | Wie überprüfe ich, ob mein Eingabepuffer (Stdin) leer ist?
- 6. Wie überprüfe ich, ob eine IsolatedStorageFile existiert?
- 7. Wie überprüfe ich, ob eine Liste sortiert ist?
- 8. Blueprint: Wie überprüfe ich, ob eine optionale Abhängigkeit erfüllt ist?
- 9. Wie überprüfe ich, ob eine FormData-Datei leer ist?
- 10. Wie überprüfe ich, ob eine Region ein Kreis ist?
- 11. Wie überprüfe ich, ob eine Datei eine reguläre Datei in C++ ist?
- 12. Wie überprüfe ich, ob eine Datei eine SQLite-Datenbank in C# ist?
- 13. Wie überprüfe ich, ob eine Austauschverbindung gültig ist? (via ews)
- 14. Wie überprüfe ich, ob eine PHP-Sitzung leer ist?
- 15. Wie überprüfe ich, ob der Datensatz in SQLite in C
- 16. Wie überprüfe ich, ob ich eine Datei löschen kann?
- 17. Wie überprüfe ich, ob der Benutzer in Javascript eingeloggt ist
- 18. Wie überprüfe ich, ob ein Verzeichnis in PHP beschreibbar ist?
- 19. Wie überprüfe ich programmatisch, ob Visio installiert ist und wo?
- 20. Wie überprüfe ich, ob eine Datei in einer Fernbedienung existiert?
- 21. Wie überprüfe ich, ob eine Variable in eex existiert?
- 22. Wie überprüfe ich in Python, ob eine Variable existiert?
- 23. Wie überprüfe ich, ob Server.GetLastError() = System.Web.UI.ViewStateException?
- 24. Wie überprüfe ich, ob meine Anfrage - Antwort verschlüsselt ist?
- 25. Wie überprüfe ich, ob ein Repository leer ist?
- 26. Wie überprüfe ich, ob ein Perl-Modul installiert ist?
- 27. Wie überprüfe ich, ob Bitmaske Bit enthält?
- 28. Chef: Wie überprüfe ich, ob ein Service installiert ist?
- 29. Ermitteln, ob ASP.Net korrekt registriert ist
- 30. Wie überprüfe ich, ob ein NSTimer läuft?
Erm, Ihre Hoffnungen von regsvr32 in der Lage zu registrieren, dass COM-Server sollte schlank sein. Es erfordert Administratorrechte. Verwenden Sie reg-freie COM. –