2009-06-17 4 views
3

Ich versuche, ein Windows Media Player-COM-Objekt auf meinem Rechner zu instanziiert:Kann nicht COM-Komponente in C# instanziiert - Fehler 80070002

Guid mediaPlayerClassId = new Guid("47ac3c2f-7033-4d47-ae81-9c94e566c4cc"); 
Type mediaPlayerType = Type.GetTypeFromCLSID(mediaPlayerClassId); 
Activator.CreateInstance(mediaPlayerType); // <-- this line throws 

Wenn die letzte Zeile ausgeführt wird, ich die folgende Fehlermeldung erhalten:

System.IO.FileNotFoundException was caught 
    Message="Retrieving the COM class factory for component with CLSID {47AC3C2F-7033-4D47-AE81-9C94E566C4CC} failed due to the following error: 80070002." 
    Source="mscorlib" 
    StackTrace: 
     at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) 
     at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) 
     at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) 
     at System.Activator.CreateInstance(Type type, Boolean nonPublic) 
     at System.Activator.CreateInstance(Type type) 
     at MyStuff.PreviewFile(String filePath) in F:\Trunk\PreviewHandlerHosting\PreviewHandlerHost.cs:line 60 
    InnerException: 

Derselbe Code funktioniert auch auf anderen Entwicklungsmaschinen und Endbenutzermaschinen. Aus irgendeinem Grund schlägt es nur auf meinem Computer fehl. Was könnte der Grund sein?

+0

Ich wünsche Ihnen hatte geschrieben, was das Problem war, um anderen zu helfen, die hier später ankommen .... – overslacked

+0

Das Problem stellte sich heraus, Sei etwas wirklich Spezifisches für unser Unternehmen. Im Grunde hatte unsere Software einen Windows Media-Preview-Handler installiert, der später deinstalliert wurde, aber einige Registrierungsschlüssel an Ort und Stelle blieben. Dieser Vorschau-Handler war verschwunden - daher Fehler "Datei nicht gefunden" -, aber einige Registrierungsschlüssel blieben übrig, was dieses Problem verursachte. –

+0

Vielen Dank für das Update! Ich bin auf einem Server rauf und runter gegangen, auf dem wir denselben Fehler haben ... Ich nehme alle Details, egal wie abstrakt oder nutzlos sie scheinen. – overslacked

Antwort

5

80070002 ist eine Datei nicht gefunden wird.

Meine Vermutung ist Ihre Maschine fehlt eine Abhängigkeit. Versuchen Sie, die com-Komponente über depends.exe auszuführen, um zu sehen, ob Sie alle erforderlichen Bibliotheken installiert haben.

+0

Danke für den Vorschlag. Ich werde die Datei "depends.exe" ausführen und mich umgehend bei Ihnen melden. –

+0

Danke, das hat mir geholfen, das wahre Problem aufzuspüren. Ich markiere deine als Antwort. –

2

, Well 0x80070002 Mittel Datei nicht gefunden, also würde ich überprüfen, um zu sehen, ob die DLL zu spitz in der COM-Registrierung existiert tatsächlich auf Ihrem Rechner

+0

Es zeigt auf Windows Media Player COM-Objekt, das auf meinem Computer natürlich vorhanden ist, und läuft gut ... hmmm. –

0

Wenn der Anwendungspool abstürzt, kann dieser Fehler auftreten. Sie können Ihren Code überprüfen, wenn eine Funktions- oder Objektinitialisierung länger wiederholt wird. Dies kann zu Speicherlecks und zum Absturz des Anwendungspools führen.

0

Weitere möglicherweise hilfreiche Informationen. Wir haben dieses Problem auf einer klassischen Asp-Web-App gesehen, die .net-Komponenten lädt. Eine App war in Ordnung, eine andere nicht. Die gleiche Maschine? Also was gibt es? Wir haben keine richtigen Fehler erhalten, wenn wir eine COM-Komponente nicht laden konnten, nur die Fehlernummer 0x80070002.

Schließlich wurde dies behoben, indem der App-Pool der kaputten App auf den gleichen Wert gesetzt wurde wie die funktionierende App. Etwas über den App-Pool bedeutete, dass die Komponente nicht richtig geladen werden konnte, die gleiche Identität usw. (siehe 6).

Es gab eine Reihe von alten Versionsnummern in der Registrierung für diese Komponente, aber regasm macht das immer, es ist schrecklich beim Aufräumen, wir mussten sogar ein kleines Werkzeug schreiben, um alle zu löschen, wenn man zwischen Versionsnummern wechselt auf Dev-Maschinen. Aber in diesem Fall waren diese Versionsnummern nicht das Problem.

Fazit: klingt wie ein Berechtigungsproblem, aber was weiß ich ..

Verwandte Themen