He diseñado una aplicación que no requiere instalación y puede ser utilizado por usuarios que no son administradores. «No me gustaría perder esta funcionalidad pero cuando uso el .exe en otros equipos que no sea la que yo he programado en me sale un error de que falta un MSVCP100.dll se impide que el archivo de la ejecución.

¿Qué estoy haciendo mal aquí? ¿Cómo puedo incluir el archivo en mi versión de lanzamiento?

Gracias!

4 Comentarios

  1. 30

    Configurar el proyecto para enlazar estáticamente a la C/C++ en tiempo de ejecución en lugar de vincular a la DLL de tiempo de ejecución:

    • Propiedades De Configuración | C/C++ | Generación De Código | Biblioteca De Tiempo De Ejecución

    Seleccione Multi-threaded (/MT) (o Multi-roscado de Depuración (MTd) para la generación de depuración).

    Como una alternativa, usted debería ser capaz de obtener la implementación de xcopy de la C/C++ DLL en tiempo de ejecución utilizando la técnica documentada en http://msdn.microsoft.com/en-us/library/ms235291.aspx bajo el título «la Implementación de Visual C++ biblioteca de archivos Dll como privado asambleas». No he probado esa técnica, como es generalmente más fácil de enlazar estáticamente si usted necesita xcopy instalación de un nativo programa de C++.

    • Lo ideal, sin embargo, tendría que utilizar un manifiesto y distribuir a través de ClickOnce para que los futuros parches para el .dll que uso get update de forma adecuada. Pero esto también funciona 🙂
    • a pesar de que tipode va en contra de la «no requiere instalar» parte 😉
    • Por no hablar de la «c++» parte.
    • Muchas gracias por tu respuesta. Me pasé un montón de tiempo tratando de averiguar cómo hacer que mi ejecutable que se ejecuta en otro equipo sin ningún éxito hasta que la lectura de su solución.
  2. 4

    http://msdn.microsoft.com/en-us/library/ms235299.aspx

    Distribuir aplicaciones que se han compilado con Visual C++ requiere distribuir el runtime de C++.dll que usa la aplicación. En tu caso, supongo que solo desea distribuir una carpeta, así que siga las instrucciones (modificado apropiadamente para su aplicación) aquí:

    http://msdn.microsoft.com/en-us/library/dd293565.aspx

    O simplemente copiar msvcp100.dll en la aplicación del directorio junto a el .exe y usted será bueno para ir.

    De 32 bits msvcp100.dll es en C:\Windows\SysWOW64\

    De 64 bits msvcp100.dll es en C:\Windows\System32\

    • «O simplemente copiar msvcp100.dll en la aplicación del directorio junto a el .exe y usted será bueno para ir.» mi entender fue que no podían hacer esto?
  3. 3

    ¿Qué estoy haciendo mal aquí

    Lo que tenía era dll hell. Había involuntariamente utiliza una dinámica de vinculación con la anterior compilador donde se acaba de suceder en la mayoría de los sistemas de destino no fue apropiado C en tiempo de ejecución. Windows incluye a menudo VC 6 CRT, y con las más recientes SP incluso VC7 & 8 CRT.

    Cuando cambió a la VC compilador de la mayoría de los sistemas no tendrá el nuevo tiempo de ejecución VC pre instalado para usted.

    Como Michael Burr dice, usted puede tener su «no instalar» atrás si se enlaza estáticamente.

    O podría incluir la CRT y se manifiestan en la misma carpeta, no requieren de instalación.

    O incluir la vcredist.exe desde VS2010 y tienen un descuento de 1 instalar

    • ¿No sería este llamado «no-idea-lo-dll-del infierno?»
    • Eso es digno de un punto. 🙂
    • Yo de segundo de eso. Definitivamente vale la pena un punto.

Dejar respuesta

Please enter your comment!
Please enter your name here