He creado una aplicación C# .NET que utiliza el control Adobe ActiveX para mostrar un PDF.¿Cómo diagnosticar causa, solución o solucionar el error relacionado con Adobe ActiveX/COM 0x80004005 de forma progmática?
Se basa en un par de archivos DLL que se envían con la aplicación. Estas DLL interactúan con Adobe Acrobat instalado localmente o Adobe Acrobat Reader instalado en la máquina.
Esta aplicación ya está siendo utilizada por algunos clientes y funciona muy bien para casi todos los usuarios (compruebo que la máquina local ya esté funcionando al menos con la versión 9 de Acrobat o Reader).
He encontrado 3 casos donde la aplicación devuelve el mensaje de error "Error HRESULT E_FAIL ha sido devuelto desde una llamada a un componente COM" al intentar cargar (cuando se está cargando el control activex).
He comprobado una de estas máquinas del usuario y tiene instalado Acrobat 9 y lo usa con frecuencia sin problemas. Parece que Acrobat 7 y 8 se instalaron al mismo tiempo ya que hay entradas para ellos en el registro junto con Acrobat 9.
No puedo reproducir este problema localmente, por lo que no estoy seguro exactamente qué dirección tomar .
El error en la parte superior de stacktrace es: System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL ha sido devuelto por una llamada a un componente COM.
Algunas investigaciones sobre este error indican que se trata de un problema de registro.
¿Alguien tiene una idea de cómo solucionar o solucionar este problema o determinar cómo llegar al origen del problema?
El contenido completo del mensaje de error es la siguiente:
System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL ha sido devuelto de una llamada a un componente COM. en System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance (Guid & clsid, de objetos punkOuter, el contexto Int32, Guid & iid) en System.Windows.Forms.AxHost.CreateWithoutLicense (Guid clsid) en System.Windows.Forms.AxHost .CreateWithLicense (licencia de cuerdas, Guid idcls) en System.Windows.Forms.AxHost.CreateInstanceCore (Guid idcls) en System.Windows.Forms.AxHost.CreateInstance() en System.Windows.Forms.AxHost.GetOcxCreate() en System.Windows.Forms.AxHost.TransitionUpTo (estado de Int32) en System.Windows.Forms.AxHost.CreateHandle() en System.Windows.Forms.Control.CreateControl (boolean fIgnoreVisible) en System.Windows.Forms.Control.CreateControl (Boolean fIgnoreVisible) en System.Windows.Forms.AxHost.EndInit() en AcrobatChecker.Viewer.InitializeComponent() en AcrobatChecker.Viewer..ctor() en AcrobatChecker .Form1.btnViewer_Click (Object Sender, EventArgs e) en System.Windows.Forms.Control.OnClick (EventArgs e) en System.Windows.Forms.Button.OnClick (EventArgs e) en System.Windows.Forms.Button .OnMouseUp (MouseEventArgs mevent) en System.Windows.Forms.Control.WmMouseUp (Mensaje & m, botón MouseButtons, clics Int32) en System.Windows.Forms.Control.WndProc (Mensaje & m) en System.Windows.Forms.ButtonBase.WndProc (Mensaje & m) en System.Windows.Forms.Button.WndProc (Mensaje & m) en System.Windows.Forms.Control.ControlNativeWindow. OnMessage (Mensaje & m) en System.Windows.Forms.Control.ControlNativeWindow.WndProc (Mensaje & m) en System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Podría ser cuestión de 32 bits/64 bits, que el sistema operativo es de 64 bits, mientras que los de Adobe DLL son de 32 bits. –
"Algunas investigaciones sobre este error indican que es un problema de registro". Prueba esa hipótesis Obtenga RegMon, o ProcMon o lo que sea que estén llamando esa cosa hoy en día y vea si los accesos al registro son los que espera que se den si alguien está intentando crear un objeto COM. –
No estoy familiarizado con cómo hacer lo que está sugiriendo ... ¿Cómo veo si los accesos de registro son como esperaría que alguien intente crear un objeto COM? una vez que ejecuta ProcMon o similar? - Me gustaría averiguarlo antes de intentarlo en la máquina del usuario, ya que tengo acceso limitado a su máquina. – Streamline