Domanda

Sto tentando di creare un'istanza di un oggetto COM di Windows Media Player sul mio computer:

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

Quando eseguo l'ultima riga, ottengo il seguente errore:

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: 

Questo stesso codice funziona su altre macchine per sviluppatori e macchine per utenti finali. Per qualche motivo, non riesce solo sulla mia macchina. Quale potrebbe essere la causa?

È stato utile?

Soluzione

80070002 è un errore File Not Found.

Suppongo che alla tua macchina manchi una dipendenza. Prova a eseguire il componente com tramite depend.exe per vedere se hai installato tutte le librerie richieste.

Altri suggerimenti

Bene, 0x80070002 significa che il file non è stato trovato, quindi verificherei se la DLL indicata nella registrazione COM esiste effettivamente sul tuo computer

Se il pool di applicazioni si arresta in modo anomalo, questo errore può verificarsi. Puoi controllare il tuo codice se c'è qualche inizializzazione di funzioni o oggetti che si ripete più alla fine. Ciò può causare perdite di memoria e, infine, crash del pool di applicazioni

Ulteriori informazioni eventualmente utili. Abbiamo riscontrato questo problema su un'app Web ASP classica che carica componenti .net. un'app andava bene, un'altra no. Stessa macchina? Quindi cosa dà? Non abbiamo riscontrato errori corretti in merito al mancato caricamento di un componente com, solo il numero di errore 0x80070002.

Alla fine questo è stato risolto semplicemente impostando il pool di app dell'app non funzionante sullo stesso dell'app funzionante. Qualcosa nel pool di app significava che il componente non poteva essere caricato correttamente, stessa identità ecc. (Iis 6).

C'erano un sacco di vecchi numeri di versione nel registro per quel componente, ma il regasm lo fa sempre, è terribile a ripulire, abbiamo anche dovuto scrivere un piccolo strumento per eliminarli tutti quando ci si sposta tra i numeri di versione su macchine di sviluppo. Ma in questo caso, quei numeri di versione non erano il problema.

Conclusione: sembra un problema con le autorizzazioni, ma cosa ne so ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top