Tengo un VB.NET proyecto, y funciona bien en mi deveelopment de la máquina (por supuesto :-)), pero en dos equipos diferentes que he probado, me sale el siguiente error, cuando intento abrir un formulario específico. Los tres equipos (incluyendo a mi dev máquina, que funciona) son de Windows 7 máquinas de 64-bits, dos Professional Edition (incluyendo la mía) y la tercera es Home Basic.

Mi sospecha es que tiene algo que ver con El Reproductor De Windows Media o SWF de Adobe de los controles del reproductor que he insertado. Aquí está el error:

System.Runtime.InteropServices.COMException (0x80040154): Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
at System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
at System.Windows.Forms.AxHost.CreateWithoutLicense(Guid clsid)
at System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)
at System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)
at System.Windows.Forms.AxHost.CreateInstance()
at System.Windows.Forms.AxHost.GetOcxCreate()
at System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
at System.Windows.Forms.AxHost.CreateHandle()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.AxHost.EndInit()
at WizoDesktop.FormPlayer.c4cf84dbbc00986a0b43ce266bdec20d7()
at WizoDesktop.FormPlayer..ctor()
at A.c237671a6e3a2745adc05bbdc0150506d.cff280b017b22ca351191a6adb2feeae4()
at System.Windows.Forms.Command.Invoke()
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
  • Suponiendo que se ha establecido la Plataforma de destino establecido para x86, este error no significa nada más que el control ActiveX no está instalado en la máquina. Cientos de preguntas sobre este código de error ya.
  • He buscado a través de StackOverflow, así como otros sitios y las respuestas parecen lidiar con HTMLED y otros archivos dll. También, estoy usando .Red integrada de instalador – ¿no debería tener cuidado de cómo instalar los controles ActiveX (supongo WMP es en el .Net Framework).
  • No, el .NET installer ciertamente no instalar los componentes de ActiveX, que se instala .NET framework de componentes. WMP es un componente de Windows, no puedes instalarlo. Tan altas probabilidades para el Adobe cosas.
  • Miré a mi instalador y no tiene la Interop.ShockwaveFlashObjects.dll y también Interop.WMPLib.dll O no es esto de lo que estamos hablando?
  • Seguro, esos son los .NET contenedores para estos componentes ActiveX. Sólo los contenedores, no el propio componente. Usted tendrá que instalar al menos el Flash en el equipo.
  • bingo! Su suposición era correcta, eliminando el control de Flash eliminado el error. Ahora tengo que averiguar cómo implementar la solución ofrecida por @ Kratz a continuación

InformationsquelleAutor Chiwda | 2012-12-04

1 Comentario

  1. 1

    Como Hans dice, esto se produce debido a que los programas que está utilizando (WMP, Flash) es probable que no se instala en el equipo de destino. La cosa más fácil que puedes hacer es tratar de detectar esto y advertir al usuario de que se tiene que instalar los programas para la funcionalidad completa. Así que algo como esto:

    Try
         Dim test as New WindowMediaPlayerControl 
    Catch ex as exception
         MsgBox("The program requires Media Player to be installed.")
    End Try 

    Entonces usted podría incluso establecer un indicador que así que usted puede evitar la carga de windows con el control, para evitar que el usuario vea el error.

    No estoy seguro de si esto es posible, pero si usted está utilizando la implementación de ClickOnce usted puede mirar aquí para ver la posibilidad de añadir personalizado requiere instaladores para su programa. http://msdn.microsoft.com/en-us/library/ms165429(VS.80).aspx

    Editar: Como Hans señaló, mi Try Catch es un poco flojo de arriba, usted siempre debe tratar de ser muy específico, si usted está tratando de manejar un determinado error. Algo como esto para este caso.

    Catch ex As System.Runtime.InteropServices.COMException When ex.Message.Contains("REGDB_E_CLASSNOTREG")
    • Esto suena factible, excepto que he insertado el control en tiempo de diseño, y he tenido problemas con hacerlo en tiempo de ejecución. Por ejemplo, VB agrega el control en la sección de Declaraciones que no me permite agregar un Try Catch. Voy a jugar con ella, pero si usted tiene alguna sugerencia, por favor hágamelo saber.
    • Este es mal de manejo de excepciones. Se convierte en todo lo que puede ir mal en un «instalar por primera vez el mensaje de error». Si ya está instalado, a continuación, el usuario no tiene ninguna esperanza de diagnosticar el problema real. Nunca ocultar el verdadero mensaje de excepción.
    • sí, estás en lo correcto. Ver mi respuesta actualizada, ¿cree usted que sería lo suficientemente específica como para mostrar un «No Instalado» error?
    • en mi ejemplo, yo era sólo la creación de una instancia de la clase de control a prueba y ver si funciona, no añadiendo el Try..Catch con el código real, donde está siendo utilizado. Se podría poner algo como lo anterior, en el inicio de las formas Load evento (al menos si el control no está en el formulario de inicio). En una nota de lado, probablemente hay mejores maneras para ver si el control que necesitas está instalado (verificación de registro tal vez), esto es sólo un rápido check para ver si el control puede ser creado.
    • Nope! Nota resuelto y una de las razones por las que el proyecto está en el limbo. 🙁

Dejar respuesta

Please enter your comment!
Please enter your name here