none
Publicar mi aplicación de windows form RRS feed

  • Pregunta

  • Buenos días, estoy haciendo una prueba para ver el resultado de mi aplicación al instalarla en otra pc.

    Me surge el problema con el motor de la base de datos de Access de la que se alimenta mi aplicación.

    Cuando resulta que no tiene instalado  el PROVEEDOR DE DATOS MICROSOFT.ACE.OLEDB.12.0, le informo de que debe instalarlo, redirigiendole a la página de microsoft donde descargarlo, pero entonces me sale un mensaje, de que no puedo instalarlo porque existen productos de 32 bits instalados.

    No sé como puedo resolver esto.

    Gracias

    martes, 28 de julio de 2020 7:16

Respuestas

  • No tiene solución "buena". Se puede recurrir a trucos editando el registro de Windows para conseguir instalar a la vez la versión de 32 bits y la de 64. Pero lógicamente, esto es una opción "no soportada".

    Otra alternativa es que en las propiedades de tu proyecto marques la opción para que se compile como "x86" en lugar de "Any CPU". Eso fuerza a que se ejecute en 32 bits, y entonces puede usar la versión de 32 bits del Microsoft.ACE. Pero te encontrarás con el problema opuesto en caso de que tu programa deba usarlo un usuario que tenga instalado el Office en 64 bits. Entonces le dirá que no puede instalar la versión de 32 bits del ACE. En ese caso, a este usuario tendrías que entregarle la versión de 64 bits de tu programa, en lugar de la versión de 32 bits.

    • Marcado como respuesta Angelnovato martes, 28 de julio de 2020 7:37
    martes, 28 de julio de 2020 7:22
  • No, no es factible. No puedes configurar una clase para que se ejecute con distinto número de bits que el llamante. Una vez configurado el .exe para que ruede en 32 o en 64 bits, todas las librerías a las que llame vienen forzadas a ser del mismo tipo.

    Lo que sí funcionaría es hacer un diminuto proyecto de tipo .exe que sea el "Iniciador" y que esté compilado para "Any CPU". Este .exe podría examinar cuál es la versión de ACE que está instalada (no sé cómo se hace pero seguro que existe alguna forma de encontrarla, posiblemente a través del Registro de Windows). Y entonces, según la versión instalada, usar Process.Start para invocar a una de las dos versiones de tu programa, que estaría compilado tanto en 32 como en 64 bits. Pero tiene que ser Process.Start para que puedas llamar desde 32 a 64 o viceversa. No puede ser una llamada a una clase, que no puede cambiar el número de bits.

    • Marcado como respuesta Angelnovato miércoles, 29 de julio de 2020 7:22
    martes, 28 de julio de 2020 14:24

Todas las respuestas

  • No tiene solución "buena". Se puede recurrir a trucos editando el registro de Windows para conseguir instalar a la vez la versión de 32 bits y la de 64. Pero lógicamente, esto es una opción "no soportada".

    Otra alternativa es que en las propiedades de tu proyecto marques la opción para que se compile como "x86" en lugar de "Any CPU". Eso fuerza a que se ejecute en 32 bits, y entonces puede usar la versión de 32 bits del Microsoft.ACE. Pero te encontrarás con el problema opuesto en caso de que tu programa deba usarlo un usuario que tenga instalado el Office en 64 bits. Entonces le dirá que no puede instalar la versión de 32 bits del ACE. En ese caso, a este usuario tendrías que entregarle la versión de 64 bits de tu programa, en lugar de la versión de 32 bits.

    • Marcado como respuesta Angelnovato martes, 28 de julio de 2020 7:37
    martes, 28 de julio de 2020 7:22
  • Gracias Alberto por responder tan rápido.

    Se me está ocurriendo (Dime si eso es factible) que mi aplicación tenga dos clases: una para 32 bits y otra para 64, y que al inicio detecte si debe utilizar una u otra. ¿Que te parece?

    Gracias

    martes, 28 de julio de 2020 7:37
  • Hola, 

    Gracias por confirmar que se ha encontrado una solución a la consulta realizadaDebido a elloeste hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

     

    Eric Ruiz

    ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    martes, 28 de julio de 2020 13:17
    Moderador
  • No, no es factible. No puedes configurar una clase para que se ejecute con distinto número de bits que el llamante. Una vez configurado el .exe para que ruede en 32 o en 64 bits, todas las librerías a las que llame vienen forzadas a ser del mismo tipo.

    Lo que sí funcionaría es hacer un diminuto proyecto de tipo .exe que sea el "Iniciador" y que esté compilado para "Any CPU". Este .exe podría examinar cuál es la versión de ACE que está instalada (no sé cómo se hace pero seguro que existe alguna forma de encontrarla, posiblemente a través del Registro de Windows). Y entonces, según la versión instalada, usar Process.Start para invocar a una de las dos versiones de tu programa, que estaría compilado tanto en 32 como en 64 bits. Pero tiene que ser Process.Start para que puedas llamar desde 32 a 64 o viceversa. No puede ser una llamada a una clase, que no puede cambiar el número de bits.

    • Marcado como respuesta Angelnovato miércoles, 29 de julio de 2020 7:22
    martes, 28 de julio de 2020 14:24
  • Gracias Alberto, por tu explicación. Me aclaras muchas cosas porque yo me pierdo. He montado uno en 64 bits y otro en normal.

    Gravias de Nuevo. Saludos.

    miércoles, 29 de julio de 2020 7:22