Benutzer mit den meisten Antworten
CertADM - COM / ICertView2 - Fehler beim registrieren

Frage
-
Hallo,
ich habe da mal wieder ein Thema.
Seit Stunden versuche ich die certadm.dll (aus dem Windows Server Administration Toolkit) in meinem System zu registrieren. Leider ohne Erfolg.
Meine Vorgehensweise:
1.) regsvr certadm.dll --> DLLRegisterServer in certadm.dll succeeded (soweit so gut)
2.) per TlbImp.exe certadm.dll eine CERTADMINLib.dll erstellt (in System32)
3.) Ein Projekt geöffnet und CERTADMINLib.dll als Referece eingetagen --> sweit so gut
4.) Bei Ausführen bekomme ich folgenden Fehler:
Unhandled Exception: System.Runtime.InteropServices.COMException (0x80110802): Retrieving the COM class factory for component with CLSID {A12D0F7A-1E84-11D1-9BD6-00C04FB683FA} failed due to the following error: 80110802.
Mein Code:
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace CertAdm { class Program { static void Main(string[] args) { CERTADMINLib.ICertView2 cv2 = new CERTADMINLib.CCertViewClass(); } } }
sehr simpel also.
Wo liegt mein Fehler? Mein System ist ein x64.
Antworten
-
Könnte ich eventuell die Version 5.1 der DLL (siehe oben) bekommen (SkyDrive etc.)?
Hallo Stephan T. _,
Die Datei die ich habe ist dieselbe wie hier aufgelistet (certadm.dll | 5.2.3790.0 | Size: 85504).
Wie kommst Du jetzt auf diese Datei?
- Erstmals das Windows Server 2003 Administration Tools Pack ausführen.
- Es werden drei Dateien erstellt. Es interessiert uns die Datei adminpak.msi.
- Wir wollen nicht die .msi installieren (geht sowieso nicht weil sie nicht für Windows 7 ist) sondern aus der .msi Datei die certadm.dll extrahieren
- http://www.legroom.net/scripts/download.php?file=uniextract161 (Universal Extractor) herunterladen und installieren.
- Rechtsklick auf adminpak.msi à UniExtract to Subdir (MsiX extraction wählen)
- Im Ordner adminpak der aus dem Schritt 5) erstellt wurde rechtsklick auf Cabs.adminpak.CAB à UniExtract to Subdir
- Im Ordner Cabs.adminpak der aus dem Schritt 6) erstellt wurde befindet sich die Datei certadm.dll (5.2.3790.0 | Size: 85504)
- Dieselbe Schritte wie in meinem Beitrag von Dienstag, 23. Oktober 2012 13:27 machen (bei Schritt 2 Regsvr32 certadm.dll à DLLRegisterServer in certadm.dll succeeded must Du nach Regsvr32 den ganzen Pfad zu der Datei certadm.dll angeben)
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort markiert Stephan T._ Freitag, 2. November 2012 09:12
Alle Antworten
-
Hallo Stephan,
Hier findest Du ein Beispiel mit early und late binding to component. Vieleicht kann dass Dir weiterhelfen.
Viele Grüße,
Ionut -
Hallo Stephan T. _,
Ich habe es auch unter Windows 7 mit SP1 X64 System getestet. Folgende Schritte waren erfolgreich:
- Visual Studio 2010 Command Prompt mit Administratorrechte laufen lassen
- Regsvr32 certadm.dll à DLLRegisterServer in certadm.dll succeeded
- Rechtsklick im Projekt à Add Reference à COM Reiter à Component Name = CertAdm 1.0 Type Library (die certadm.dll Datei) einfügen
- Auf die Eigenschaften von CERTADMINLib (Interop.CERTADMINLib) gehen und Embed Interop Types auf True setzen für die Zeile CERTADMINLib.ICertView2 cv2 = new CERTADMINLib.CCertView (); [Microsoft.CSharp -> Embed Interop Types = False]
- Wichtig ! Nur für x86 Kompilieren (also kein AnyCPU oder x64)
[C# Code z.B.]
private void button1_Click(object sender, EventArgs e)
{
CERTADMINLib.ICertView2 cv2 = new CERTADMINLib.CCertView();
Console.WriteLine(cv2.GetHashCode().ToString());
}
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort markiert Stephan T._ Dienstag, 23. Oktober 2012 15:39
- Tag als Antwort aufgehoben Stephan T._ Dienstag, 23. Oktober 2012 16:25
-
Danke erst einmal für die schnelle Antwort und für das Testen!! Top!!
Auf Ihren Test hin habe ich mich nochmals hingesetzt!
Ich habe meinen "Fehler" gefunden: Ich habe versucht die certadm-Version 6.1.7.6 (aus dem Server 2008 R2 SP1) zu importieren. Das geht leider (bei mir) nicht.
Die Version 5.1 wiederum konnte ich nach dem Import ohne Probleme unter COM finden!
Somit hat sich das Thema geklärt :-)
Danke nochmals !!
- Bearbeitet Stephan T._ Dienstag, 23. Oktober 2012 15:38
- Als Antwort markiert Stephan T._ Dienstag, 23. Oktober 2012 15:38
- Tag als Antwort aufgehoben Stephan T._ Dienstag, 23. Oktober 2012 16:10
-
Danke erst einmal für die schnelle Antwort und für das Testen!! Top!!
Auf Ihren Test hin habe ich mich nochmals hingesetzt!
Ich habe meinen "Fehler" gefunden: Ich habe versucht die certadm-Version 6.1.7.6 (aus dem Server 2008 R2 SP1) zu importieren. Das geht leider (bei mir) nicht.
Die Version 5.1 wiederum konnte ich nach dem Import ohne Probleme unter COM finden!
Somit hat sich das Thema geklärt :-)
Danke nochmals !!
Halt. Falsch.
Das Problem war nicht die Version, sondern der Speicherort ?! (kann das sein?) Unter System32 (wo sie ja eigendlich hin gehört) konnte ich die certadm nicht importieren. Unter z.B. Downloads ging es. Schräg.
Der Witz ist:
Retrieving the COM class factory for component with CLSID {A12D0F7A-1E84-11D1-9BD6-00C04FB683FA} failed due to the following error: 80110802 Exception from HRESULT: 0x80110802.
Mit registrierter DLL auf .Net4 x86.
Edit: In der Reg. finde ich keinen Eintrag zu A12D0F7A-1E84-11D1-9BD6-00C04FB683FA.
- Bearbeitet Stephan T._ Dienstag, 23. Oktober 2012 16:39
-
Hallo StephanT.__,
Ich habe unter Windows7 SP1 x64 mit VS2010 und Remote Server Administration Tools for Windows 7 with Service Pack 1 (SP1) getestet.
- Install the SDK
- In “Control Panel” -> “Programs and Features” -> “Turn Windows features on or off” muss Du Remote Server Administration Tools aktivieren.
- Tlblmp.exe certadm.dll eine CERTADMINLib.dll erstellen (in SysWOW64)
- Ein Projekt geöffnet und CERTADMINLib.dll als Reference eintragen (von SysWOW64)
- CERTADMINLib properties -> Embed Interop Types = False
- Kompilieren für x64.
Viele Grüße,
Ionut
-
Hallo Stephan T. _,
Die Datei certadm.dll mit dem ich den obigen Test gemacht habe ist: 5.2.3790.0
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hallo StephanT.__,
Ich habe unter Windows7 SP1 x64 mit VS2010 und Remote Server Administration Tools for Windows 7 with Service Pack 1 (SP1) getestet.
- Install the SDK
- In “Control Panel” -> “Programs and Features” -> “Turn Windows features on or off” muss Du Remote Server Administration Tools aktivieren.
- Tlblmp.exe certadm.dll eine CERTADMINLib.dll erstellen (in SysWOW64)
- Ein Projekt geöffnet und CERTADMINLib.dll als Reference eintragen (von SysWOW64)
- CERTADMINLib properties -> Embed Interop Types = False
- Kompilieren für x64.
Viele Grüße,
Ionut
Habe alles so durchgeführt wir beschrieben:
1.) SDK installiert (certadm.dll Version 6.1.76)
2.) C:\Windows\SysWOW64>"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\TlbImp.exe" C:\Windows\System32\certadm.dll in der CMD.
--> Hier kam folgende Warnung: TlbImp : warning TI0000 : Importing a type library into a platform agnostic assembly. This can cause errors if the type library is not truly platform agnostic.
3.) Danach CERTADMINlib in einem neuen x64 .Net4 Projekt als Ref. aus SysWOW64 eingefügt.
4.) folgende Code verwendet:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using CERTADMINLib; namespace TestAPP3 { class Program { static void Main(string[] args) { CERTADMINLib.CCertView certView = new CERTADMINLib.CCertView(); certView.OpenConnection("\\"); } } }
Error: Retrieving the COM class factory for component with CLSID {A12D0F7A-1E84-11D1-9BD6-00C04FB683FA} failed due to the following error: 80110802 Exception from HRESULT: 0x80110802.
??
-
Hallo Stephan T. _,
Kannst Du mal sagen was Du machen möchtest? Vielleicht gibt es auch andere Wege für Dein Wunsch.
Umfasse mindestens die folgenden Schritte in der Beschreibung Deines Problems:
1) Eine Übersicht der Funktionsweise von dem Programm.
2) Was erwartest Du dass Dein Code machen soll?
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hallo,
es ist eigendlich ganz einfach:
Es soll aus der CA-Datenbank mir einfach nur die ausgestellten Zertifikate ausgeben, welche in x Tagen ablaufen.
Um auf die Datenbank zugreifen zu könne benötige ich die certadm.dll --> siehe Blog von Alejandro Campos Magencio
-
Es soll aus der CA-Datenbank mir einfach nur die ausgestellten Zertifikate ausgeben, welche in x Tagen ablaufen.
Hallo Stephan T. _,
Für solche Sachen ist PowerShell geeignet:
Listing certificates that expire soon (This script needs to be run on the CA server to test) à http://blog.crayon.no/files/folders/scripts/entry13037.aspx
Noch zum lesen: How to find expired certificates (through the Certificate provider) mit Script Property:
<Type> <Name>System.Security.Cryptography.X509Certificates.X509Certificate2</Name> <Members> <ScriptProperty> <Name>Expired</Name> <GetScriptBlock>$this.NotAfter -lt (Get-Date)</GetScriptBlock> </ScriptProperty> <ScriptProperty> <Name>ExpireIn (Days)</Name> <GetScriptBlock> $days = $this.NotAfter.subtract([DateTime]::Now).days if($days -gt 0) {$days} </GetScriptBlock> </ScriptProperty> </Members> </Type>
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hallo Robert,
danke für die schnelle Antwort.
Ja, es ist sicherlich möglich das Ganze in PS abzubilden. Jedoch ist der oben genannte Anwendungsfall nur einer von vielen. Hier muss noch eine E-Mail Benachrichtigung, Administratorinterface und noch ein paar Funktionen rein.
Meiner Ansicht müsst was mit PS möglich ist, auch mit VC# möglich sein.
Ich werde jetzt, um auszuschließen das es an meinem System liegt, ein neues Windows + VC2010 + SDK installieren.
Könnte ich eventuell die Version 5.1 der DLL (siehe oben) bekommen (SkyDrive etc.)? Danke.
-
Könnte ich eventuell die Version 5.1 der DLL (siehe oben) bekommen (SkyDrive etc.)?
Hallo Stephan T. _,
Die Datei die ich habe ist dieselbe wie hier aufgelistet (certadm.dll | 5.2.3790.0 | Size: 85504).
Wie kommst Du jetzt auf diese Datei?
- Erstmals das Windows Server 2003 Administration Tools Pack ausführen.
- Es werden drei Dateien erstellt. Es interessiert uns die Datei adminpak.msi.
- Wir wollen nicht die .msi installieren (geht sowieso nicht weil sie nicht für Windows 7 ist) sondern aus der .msi Datei die certadm.dll extrahieren
- http://www.legroom.net/scripts/download.php?file=uniextract161 (Universal Extractor) herunterladen und installieren.
- Rechtsklick auf adminpak.msi à UniExtract to Subdir (MsiX extraction wählen)
- Im Ordner adminpak der aus dem Schritt 5) erstellt wurde rechtsklick auf Cabs.adminpak.CAB à UniExtract to Subdir
- Im Ordner Cabs.adminpak der aus dem Schritt 6) erstellt wurde befindet sich die Datei certadm.dll (5.2.3790.0 | Size: 85504)
- Dieselbe Schritte wie in meinem Beitrag von Dienstag, 23. Oktober 2012 13:27 machen (bei Schritt 2 Regsvr32 certadm.dll à DLLRegisterServer in certadm.dll succeeded must Du nach Regsvr32 den ganzen Pfad zu der Datei certadm.dll angeben)
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort markiert Stephan T._ Freitag, 2. November 2012 09:12
-
Hallo,
danke für die Antwort. Jetzt bin ich schon mal der Sache näher gekommen.
Folgende konnte ich beobachten:
Ich bekommen den Fehler nur bei ICertView/2 (cv = new CCertViewClass()) jedoch nicht bei z.B. ICertAdmin (av = new CCertAdminClass();).
Ich habe alles so gemacht wie beschrieben, aber leider ohne Erfolg.
@Robert: Klappt es bei dir mit deiner Anleitung auf einem x64 System ICertAdmin2 zu verwenden?
-
@Robert: Klappt es bei dir mit deiner Anleitung auf einem x64 System ICertAdmin2 zu verwenden?
Hallo Stephan T. _,
Also der letzte Test mit der certadm.dll aus dem Windows Server 2003 Administration Tools Pack klappte bei mir erfolgreich mit demselben System und Test den ich in dem Beitrag von Dienstag, 23. Oktober 2012 13:27 beschrieben habe (Windows 7 mit SP1 X64).
Du hast auch noch folgendes geschrieben auf einmal: „Ja, es ist sicherlich möglich das Ganze in PS abzubilden. Jedoch ist der oben genannte Anwendungsfall nur einer von vielen. Hier muss noch eine E-Mail Benachrichtigung, Administratorinterface und noch ein paar Funktionen rein.“… ich glaube Dir ist bewusst das man PowerShell Skripts aus C# laufen lassen kann und das Ergebnis in C# nachher async abfangen (Asynchronously Execute PowerShell Scripts from C# | How to run PowerShell scripts from C#)
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hallo zusammen,
erste einmal Danke für die Hilfe.
Aus bis jetzt noch ungeklärten Gründen, kann ich das Programm auf meinem Entwicklungsrechner nicht ausführen (obwohl alle oben genannten Schritte durch geführt worden sind). Kompiliere ich nun das Programm und führe es auf einer Windows Server 2003 oder 2008 aus, klapp es ohne Probleme.
Zwar umständlich, aber immerhin kann ich so das Tool fertig stellen und testen.
@Robert: Danke für den Tipp - ist jetzt aber hinfällig
Gruß
Stephan