visual studio microsoft files create crear c++ windows dll

c++ - studio - Clientes enojados, peleando con dependencias DLL desconocidas



microsoft dll (12)

Soy un hombre que desarrolla una aplicación de Windows C ++ para un cliente. En los últimos meses, hemos estado corriendo hacia los mismos problemas con las dependencias DLL faltantes en los equipos de los clientes. A pesar de mis mejores esfuerzos, algo sigue funcionando mal y recibimos correos electrónicos enojados. Mi jefe y el jefe de mi jefe están enojados conmigo y los clientes no están contentos.

Espero que ustedes puedan ayudar y dar sugerencias / ideas sobre cómo obtener los entregables en orden. Antes de algo de lo obvio:

  1. No tengo una máquina de prueba. Es decir, no puedo replicar el entorno del cliente ni intentar instalar la aplicación en un sistema "limpio" para detectar los errores antes de su envío.
  2. Intenté usar depends.exe para rastrear de qué versiones de las DLL depende mi proyecto. Estoy enviando nuestro código con los redistribuibles que he podido encontrar de esa manera. Después de eso, es un juego de espera de correo electrónico de cliente enojado.
  3. Tengo acceso a una máquina de 64 bits y a una máquina de 32 bits para instalar nuevas compilaciones. Siempre funciona allí.
  4. Estoy obligado a utilizar un archivo DLL de terceros que no se puede registrar (tiene errores).
  5. Se supone que no debo usar Install Shield, ningún otro instalador automático ni escribir un script de instalación.
  6. Proporciono instrucciones por escrito sobre cómo instalar la aplicación (descomprimir, hacer doble clic en el archivo exe).

Estoy cansado de tomar calor por estas cosas. ¿Qué estoy perdiendo que podría estar haciendo? ¿Qué debería preguntar en términos de ayuda de mi empleador? ¿Cómo debería solicitar ese apoyo de manera que lo proporcionen?

Actualizar:

Máquina virtual torpedeada. No quieren que gaste todo el tiempo configurando y destruyendo las configuraciones de los clientes. En cambio, ahora estoy trabajando con el cliente para obtener una configuración básica, de modo que conozca la configuración exacta de la máquina a la que se supone que debo dirigirme. Si no está a la altura de esa especificación, ya no me tiene que importar. Al menos algo fue a algún lado ... aunque todavía me gustaría una máquina de prueba.


No tengo una máquina de prueba. Es decir, no puedo replicar el entorno del cliente ni intentar instalar la aplicación en un sistema "limpio" para detectar los errores antes de su envío.

Este tipo de configuración nunca termina bien. No importa qué tan bueno sea usted siempre habrá diferencias significativas entre sus máquinas de desarrollo y las máquinas de los clientes. Por un lado, Visual Studio tiende a incluir una gran cantidad de tiempos de ejecución que pueden hacer que su aplicación dependa sin decir nada. Configurar una máquina virtual no es muy complicado. Uso VMWare Workstation para emular todo tipo de máquinas diferentes. El único requisito es que tenga licencias para los sistemas operativos y programas que desea instalar en las máquinas virtuales. VMWare ofrece una prueba gratuita de 30 días y después de eso creo $ 189.


¿Estás seguro de que la versión y el service pack del Windows en el que estás desarrollando es "similar" a la máquina del cliente? Si no, intenta con eso. En ocasiones, diferentes SP son los culpables del juego.

Puede usar máquinas virtuales como todos han aconsejado o bien puede tener imágenes fantasma (Norton) de varias versiones y SP, pero de nuevo su empresa debe asumir el costo de una máquina.


¿Incluyes las DLL específicas en tu instalación?

Si es así, esta es la forma incorrecta de hacerlo. En su lugar, debe incluir el paquete MS redistribuible para su compilador. Por ejemplo, si compila con MSVC 8.0 SP1, obtendrá este paquete e instalarlo con su aplicación:

Paquete redistribuible de Microsoft Visual C ++ 2008 SP1 (x86)

Cada versión de MSCV (incluido el nivel SP) tiene su propio paquete de rediseño. Asegúrese de obtener el correcto para su compilador.

Después de apagar el fuego, siéntese con su jefe y convéncele de que si va a pretender ser una empresa de software, debe actuar como tal. Obtenga un entorno de producción real. Este no es un club de programación de la escuela secundaria, es su fuente de ingresos.

EDITAR: solo para ser claro. Una vez que obtenga la redistribución, no la descomprima en su máquina y luego incluya las DLL incluidas en su configuración. En su lugar, incluya todo el instalador de redist como un subpaso de su instalación. Primero instala el redist, luego instala tu código.


¿Podrían algunas de sus dependencias vincularse estáticamente en su lugar?


Deberías irte. En su carta de renuncia debe explicar por qué la situación es ridícula y los frustra a usted y al cliente. Repasemos las cosas que ha dicho sobre su situación:

No tengo una máquina de prueba. Es decir, no puedo replicar el entorno del cliente ni intentar instalar la aplicación en un sistema "limpio" para detectar los errores antes de su envío.

Ninguna empresa de desarrollo profesional lanza productos sin probar la instalación. Somos una empresa muy pequeña y contamos con numerosas máquinas virtuales con las que realizamos pruebas y en las que ejecutamos nuestros instaladores.

Intenté usar depends.exe para rastrear de qué versiones de las DLL depende mi proyecto. Estoy enviando nuestro código con los redistribuibles que he podido encontrar de esa manera. Después de eso, es un juego de espera de correo electrónico de cliente enojado.

Tengo acceso a una máquina de 64 bits y a una máquina de 32 bits para instalar nuevas compilaciones. Siempre funciona allí.

Estos no son tan malos o extraños. Es extraño que no sepas qué DLL estás usando, pero no hay mucho que tus empleadores puedan hacer por eso, a menos que mantengas un sistema heredado indocumentado, entonces es su culpa por no documentar nada.

Lamentablemente, ha dicho que estos sistemas no son "limpios", por lo que es muy fácil perder la noción de qué pasos son realmente necesarios para instalar correctamente el producto.

Estoy obligado a utilizar un archivo DLL de terceros que no se puede registrar (tiene errores).

Esto pasa.

Se supone que no debo usar Install Shield, ningún otro instalador automático ni escribir un script de instalación.

Proporciono instrucciones por escrito sobre cómo instalar la aplicación (descomprimir, hacer doble clic en el archivo exe).

Esto es completamente loco. Los clientes NO son capaces de seguir instrucciones básicas. El hecho de que le hayan dicho que no use un instalador para facilitar la vida del cliente es casi seguramente la causa de su problema. No puedes decir lo que han hecho. Cuando les preguntas que van a mentir u olvidar lo que hicieron ... si es que alguna vez lo supieron. Sus empleadores han causado un problema de soporte severo por este edicto y la situación simplemente nunca va a mejorar para usted.

Ate esto con el primer problema (no tener plataformas de prueba de instalación adecuadas) y su producto seguramente fallará. Sus clientes DEBEN estar enojados y usted también debería estarlo. La situación que sus empleadores han creado no es propicia para el desarrollo de un producto exitoso. Simplemente, no hay nada que puedas hacer hasta que se resuelvan estos problemas.


Otras personas te han dado una respuesta general; Aquí hay un par de sugerencias más pequeñas que podrían serle útiles en caso de que no pueda tomar medidas más importantes:

  • enumere de qué archivos DLL depende su aplicación. Si no sabe exactamente de qué depende su aplicación, ¿cómo puede asegurarse de que las dependencias estén disponibles?
  • Escriba una utilidad que busque y registre cualquier instancia de esas DLL en un sistema, junto con la versión de DLL y la ruta del sistema. Si un usuario tiene problemas, esta utilidad puede ayudarlo a solucionar el problema, ya que ha mencionado que no tiene acceso físico o de red a las máquinas que presentan el problema.
  • escriba una utilidad que no haga más que LoadLibrary() sus dependencias. Se pueden registrar fallas y al menos tendrás una manera fácil de determinar qué está mal en una máquina de clientes.

Con suerte, los problemas comunes se resolverán rápidamente y se harán arreglos para que dejen de ser problemas comunes y tendrá cada vez menos necesidad de utilizar estas herramientas. Pero hasta que conozcas los problemas, pueden ser útiles.

Además, en un comentario mencionas que el problema es causado por las DLL del sistema de Windows, que generalmente causan pocos problemas de "DLL hell" en los sistemas modernos, ya que el software de terceros (incluido el tuyo) generalmente no puede reemplazarlos. Todos los sistemas de Windows deberían obtener lo que proporciona MS, y MS es bastante bueno (aunque no necesariamente perfecto) para hacer que los nuevos sean compatibles con versiones anteriores. Si esto le está causando problemas, es posible que desee publicar detalles de qué DLL son (y tal vez versiones) para que la gente pueda responder con más detalles, como lo que podría necesitarse para asegurarse de que la instalación de Windows instale la DLL.


Preséntelo a su jefe de esta manera:
Una máquina para probar instalaciones es mucho más barata que un cliente cabreado o incluso su TIEMPO para rastrear problemas.


Puede pedirle al cliente acceso a VPN o algo similar para que pueda usar su entorno.


Si no tiene una máquina de prueba, ¿puede al menos usar una máquina virtual con una instalación limpia de Windows?


Si pasa una ruta completa y absoluta a LoadLibrary() , solo buscará esa ubicación exacta para la DLL. Puede usar esto para solucionar algunos de sus problemas. Empaque todos los archivos DLL que necesita su aplicación dentro de una carpeta "lib" e inclúyalo en el archivo zip con su programa. Siempre que la carpeta "lib" viva en la misma carpeta que el .exe, puede usar GetCurrentDirectory para construir rutas absolutas a esas bibliotecas y asegurarse de que las libs que se están cargando sean las mismas que estaba utilizando cuando probó el software. Sin embargo, si está utilizando una biblioteca que no tiene los derechos para redistribuir, este método no es muy útil.


Verificaría el VMWare. Es una máquina virtual genial, y probablemente puedas imitar el entorno del cliente.

Además, me gustaría hablar con tu jefe. Es muy posible que estén bajo la suposición de que el producto que usted envió ha sido probado completamente por usted. Probablemente sea una falta de comunicación, y hablaría con él solo para estar seguro. Si su jefe no está entendiendo su punto, definitivamente consideraría renunciar porque lo que sucedería es que él afirmaría que tenía que "hablar con usted" y "corregirlo" cada vez que el producto tuviera éxito. Es muy posible que en su revisión, haya dicho que usted no cooperaba o que era peor. Así que lo mejor es hablar, luego tomar una decisión basada en si debes continuar con la compañía o no.