Pergunta

Eu estou tentando instanciar um objeto Windows Media Player COM na minha máquina:

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

Ao executar essa última linha, eu recebo o seguinte erro:

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: 

Este mesmo código funciona em outras máquinas de desenvolvimento e máquinas dos usuários finais. Por alguma razão, ele só falha na minha máquina. O que poderia ser a causa?

Foi útil?

Solução

80070002 é um arquivo não erro encontrado.

Meu palpite é a sua máquina está faltando uma dependência. Tente executar o componente COM através depends.exe para ver se você tem todas as bibliotecas necessárias instaladas.

Outras dicas

Bem, 0x80070002 meios Arquivo não encontrado, então eu iria verificar para ver se a DLL apontado no registro COM realmente existe em sua máquina

Se pool de aplicativos trava este erro pode acontecer. Você pode verificar o seu código, se houver qualquer função ou objeto de inicialização repetindo mais eventualmente. Isso pode causar perda de memória e, finalmente acidente pool de aplicativos

Mais informações possivelmente útil. Vimos esse problema em um web aplicativo asp clássico que carrega .net componentes. um aplicativo estava bem, outro não era. Mesma máquina? Então, o que dá? Nós não estavam recebendo erros próprios torno falhando ao carregar um componente com, apenas o número de erro 0x80070002.

Eventualmente, esta foi fixado por apenas definir o pool de aplicativos do aplicativo quebrado para o mesmo que o trabalho app. Algo sobre o pool de aplicativo significa que o componente não pôde ser carregado corretamente, mesma identidade etc (IIS 6).

Havia um monte de números de versão velhos no registro para esse componente, mas regasm sempre faz isso, é terrível a limpeza, nós ainda teve de escrever uma pequena ferramenta para apagar todos eles quando se deslocam entre os números de versão em máquinas desenv. Mas neste caso, esses números de versão não fosse a questão.

Conclusão: soa como um problema de permissões, mas o que eu sei ..

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top