2009-06-17 5 views
3

Je tente d'instancier un objet Windows Media Player COM sur ma machine:instanciation composant COM en C# - Erreur 80070002

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, je reçois 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 machines de développement et machines d'utilisateur final. Pour une raison quelconque, il échoue seulement sur ma machine. Quelle pourrait-être la cause?

+0

Je souhaite que vous posté quel était le problème, pour aider les autres qui arrivent ici plus tard .... – overslacked

+0

Le problème se sont révélées être quelque chose de vraiment spécifique à notre entreprise. Fondamentalement, notre logiciel a installé un gestionnaire d'aperçu Windows Media qui a été désinstallé plus tard, mais a laissé quelques clés de registre en place. Ce gestionnaire de prévisualisation a disparu - d'où l'erreur Fichier non trouvé - mais certaines clés de registre ont été laissées, provoquant ce problème. –

+0

Merci beaucoup pour la mise à jour! J'ai été de haut en bas un serveur que nous avons la même erreur sur ... Je vais prendre tous les détails, peu importe comment abstraits ou inutiles ils sont. – overslacked

Répondre

5

80070002 est un fichier non trouvé erreur.

Je suppose que votre machine manque d'une dépendance. Essayez d'exécuter le composant com via depends.exe pour voir si toutes les bibliothèques requises sont installées.

+0

Merci pour la suggestion. Je lancerai depends.exe et je vous répondrai dans les plus brefs délais. –

+0

Merci, cela m'a aidé à trouver le vrai problème. Je marque la vôtre comme réponse. –

2

Eh bien, 0x80070002 moyen Fichier introuvable, donc je vérifier si la DLL a dans l'enregistrement COM existe réellement sur votre machine

+0

Il pointe vers l'objet COM Windows Media Player, qui existe sur ma machine, bien sûr, et fonctionne bien ... hmmm. –

0

Si le pool d'applications plante, cette erreur peut se produire. Vous pouvez vérifier votre code s'il y a une fonction ou si l'initialisation de l'objet se répète plus éventuellement. Cela peut entraîner une fuite de mémoire et, au dernier arrêt de la piscine de l'application,

0

Autres informations éventuellement utiles. Nous avons vu ce problème sur une application Web ASP classique qui charge des composants .net. une application était bien, un autre ne l'était pas. Même machine? Alors qu'est-ce qui donne? Nous n'étions pas correctement les erreurs autour de ne pas charger un composant com, juste le numéro d'erreur 0x80070002. En fin de compte, cela a été corrigé en définissant simplement le pool d'applications de l'application brisée de la même façon que l'application qui fonctionne. Quelque chose à propos du pool d'applications signifiait que le composant ne pouvait pas être chargé correctement, la même identité, etc. (iis 6).

Il y avait beaucoup d'anciens numéros de version dans le registre pour ce composant, mais regasm fait toujours ça, c'est terrible au nettoyage, nous avons même dû écrire un petit outil pour les supprimer tous quand on se déplace entre les numéros de version sur les machines de dev. Mais dans ce cas, ces numéros de version n'étaient pas le problème.

Conclusion: Les sons comme un problème d'autorisations, mais qu'est-ce que je sais ..