Question

Je tente d'instancier un objet COM Windows Media Player 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 la dernière ligne, le message d'erreur suivant s'affiche:

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 les autres machines de développement et les machines de l'utilisateur final. Pour une raison quelconque, il échoue uniquement sur ma machine. Quelle pourrait être la cause?

Était-ce utile?

La solution

80070002 est une erreur de fichier introuvable.

Je suppose que votre machine manque d'une dépendance. Essayez d’exécuter le composant com avec un fichier includes.exe pour vérifier si vous avez installé toutes les bibliothèques requises.

Autres conseils

Eh bien, 0x80070002 signifie que le fichier n’a pas été trouvé. Par conséquent, je voudrais vérifier si la DLL indiquée dans l’enregistrement COM existe réellement sur votre ordinateur

Si le pool d'applications tombe en panne, cette erreur peut se produire. Vous pouvez vérifier votre code s'il existe une initialisation de fonction ou d'objet répétée plus tard. Cela peut provoquer une fuite de mémoire et, à la dernière interruption, un pool d'applications

Plus d’informations éventuellement utiles. Nous avons vu ce problème sur une application Web asp classique qui charge des composants .net. une application était bonne, une autre ne l'était pas. Même machine? Alors qu'est-ce qui donne? Nous n'avons pas reçu les erreurs appropriées lors du chargement d'un composant com, mais uniquement le numéro d'erreur 0x80070002.

Finalement, cela a été corrigé en définissant simplement le pool d'applications de l'application endommagée de la même manière que l'application active. Quelque chose à propos du pool d'applications signifiait que le composant ne pouvait pas être chargé correctement, même identité, etc. (iis 6).

Il y avait un tas d'anciens numéros de version dans le registre pour ce composant, mais regasm le fait toujours, c'est terrible à nettoyer, nous avons même dû écrire un petit outil pour les supprimer tous lorsque vous passez d'un numéro de version à un autre machines de dev. Mais dans ce cas, ces numéros de version n'étaient pas le problème.

Conclusion: cela ressemble à un problème d’autorisations, mais que puis-je savoir?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top