Ne peut pas instancier un composant COM en C# - erreur 80070002
Que j'essaie d'instancier un Windows Media Player objet COM sur ma machine:
Guid mediaPlayerClassId = new Guid("47ac3c2f-7033-4d47-ae81-9c94e566c4cc");
Type mediaPlayerType = Type.GetTypeFromCLSID(mediaPlayerClassId);
Activator.CreateInstance(mediaPlayerType); //<-- this line throws
Lors de l'exécution de cette dernière ligne, j'obtiens l'erreur suivante:
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:
Ce même code fonctionne sur d'autres ordinateurs de développement et de l'utilisateur final des machines. Pour une raison quelconque, il échoue uniquement sur ma machine. Ce qui pourrait être la cause?
Je souhaite que vous pourriez posté quel était le problème, pour aider les autres qui arrivent ici plus tard....
Le problème s'est avéré être quelque chose de très spécifique à notre société. Fondamentalement, notre logiciel a installé un Windows Media preview handler qui plus tard a été désinstallé, mais a laissé quelques clés de registre en place. Cet aperçu gestionnaire a disparu - d'où le Fichier n'est Pas Trouvé d'erreur - mais certaines clés de registre ont été à gauche, à l'origine de ce problème.
Merci beaucoup pour la mise à jour! J'ai été en haut et en bas d'un serveur, nous allons avoir ce même message d'erreur ... je vais prendre tous les détails, peu importe la façon abstraite ou inutile semblant qu'ils sont.
Si je me souviens droit, j'ai cherché sur le registre de l'ID, puis leva les yeux sur l'objet en OleView. À partir de là, j'ai commencé à réaliser qu'il était pointant vers un aperçu de gestionnaire pour un vieux format Windows Media Player nous avait été à l'aide. La suppression de ce composant à partir du registre de la correction du problème.
Le problème s'est avéré être quelque chose de très spécifique à notre société. Fondamentalement, notre logiciel a installé un Windows Media preview handler qui plus tard a été désinstallé, mais a laissé quelques clés de registre en place. Cet aperçu gestionnaire a disparu - d'où le Fichier n'est Pas Trouvé d'erreur - mais certaines clés de registre ont été à gauche, à l'origine de ce problème.
Merci beaucoup pour la mise à jour! J'ai été en haut et en bas d'un serveur, nous allons avoir ce même message d'erreur ... je vais prendre tous les détails, peu importe la façon abstraite ou inutile semblant qu'ils sont.
Si je me souviens droit, j'ai cherché sur le registre de l'ID, puis leva les yeux sur l'objet en OleView. À partir de là, j'ai commencé à réaliser qu'il était pointant vers un aperçu de gestionnaire pour un vieux format Windows Media Player nous avait été à l'aide. La suppression de ce composant à partir du registre de la correction du problème.
OriginalL'auteur Judah Gabriel Himango | 2009-06-17
Vous devez vous connecter pour publier un commentaire.
80070002 est un Fichier Non Trouvé erreur.
Ma conjecture est que votre ordinateur n'a pas une dépendance. Essayez d'exécuter le composant com par depends.exe pour voir si vous avez toutes les bibliothèques requises installé.
Merci, cela m'a aidé à traquer le vrai problème. Je suis le marquage de la vôtre comme la réponse.
OriginalL'auteur Reed Copsey
Bien, 0x80070002 signifie que le Fichier n'est pas trouvé, donc je voudrais vérifier pour voir si la DLL souligné dans l'enregistrement COM existe réellement sur votre machine
OriginalL'auteur Paul Betts
Si le pool d'application se bloque cette erreur peut se produire. Vous pouvez vérifier votre code si il existe une fonction ou de l'initialisation de l'objet de répéter plus par la suite. Cela peut provoquer des fuites de mémoire et à la dernière application de la piscine crash
OriginalL'auteur saknet
Plus éventuellement info utile. Nous avons vu ce problème sur un classique de l'application web asp, qui charge .net des composants. une application était très bien, l'autre pas. Même machine? Donc, ce qui donne? Nous n'étions pas obtenir le bon d'erreurs autour de échec du chargement d'un composant com, juste le numéro de l'erreur 0x80070002.
Finalement cela a été résolu par la seule définition de l'application de la piscine de l'application de la même façon que le travail de l'app. Quelque chose à propos de l'application de la piscine signifie que le composant ne pouvait pas être chargé correctement, même identité etc (iis 6).
Il y avait un tas de vieux numéros de version dans le registre de ce composant, mais regasm toujours fait ça, c'est terrible à le nettoyage, nous avons même eu à écrire un petit outil pour supprimer tous les déplacements entre les numéros de version de dev machines. Mais dans ce cas, ces numéros de version n'est pas la question.
Conclusion: cela ressemble à un problème d'autorisations, mais que sais-je..
OriginalL'auteur Mr AH