2010-07-01 13 views
18

He diseñado una aplicación que no requiere instalación y puede ser utilizada por no administradores. Preferiría no perder esta funcionalidad, pero cuando uso el .exe en otras computadoras que no sea la que programé, aparece un error que indica que la falta de MSVCP100.dll impide la ejecución del archivo.Después de construir exe utilizando VS 2010 falta C++ MSVCP100.dll

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

Gracias!

Respuesta

30

Configure su proyecto para enlazar estáticamente en el/C++ de tiempo de ejecución C 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

Seleccionar multi-hilo (depuración o multi-hilo (/ MTD) para su versión de depuración) (/ MT).

Como alternativa, debe poder obtener la implementación de xcopy de la DLL de tiempo de ejecución de C/C++ utilizando la técnica documentada en http://msdn.microsoft.com/en-us/library/ms235291.aspx bajo el encabezado "Implementar archivos DLL de biblioteca de Visual C++ como conjuntos privados". No he probado esa técnica, ya que en general es más simple vincular estáticamente si necesita la instalación de Xcopy de un programa C++ nativo.

+0

Idealmente, sin embargo, usarías un manifiesto y distribuirías a través de ClickOnce para que los parches futuros de los .dlls que usas tuvieran una actualización adecuada. Pero esto también funciona :) – MSN

+0

@MSN: aunque ese tipo va en contra de la parte "no requiere instalación";) – Cogwheel

+0

Sin mencionar la parte "C++". –

4

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

aplicaciones de Reparto que se han compilado con Visual C++ requiere la distribución del tiempo de ejecución C++ .DLLs que su aplicación utiliza. En su caso, supongo que quieres es simplemente distribuir una carpeta, así que siga las instrucciones (modificados adecuadamente para su aplicación) aquí:

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

O simplemente copiar msvcp100.dll en el directorio de la aplicación junto con el .exe y serás bueno para ir.

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

64-bit msvcp100.dll es en C:\Windows\System32\

+0

"O simplemente copie msvcp100.dll en el directorio de su aplicación junto con el .exe y estará listo". ¿Entendía que no se te permitía hacer esto? –

3

¿Qué estoy haciendo mal aquí

Lo que había era un infierno DLL. Sin querer, has usado un enlace dinámico con el compilador anterior donde simplemente sucedió en la mayoría de los sistemas de destino había un tiempo de ejecución de C apropiado. Windows a menudo incluía VC 6 CRT, y con SP más reciente incluso VC7 & 8 CRT.

Cuando haya cambiado al último compilador de VC, la mayoría de los sistemas no tendrán preinstalado el nuevo tiempo de ejecución de VC.

Como dice Michael Burr, puede hacer que su "no instalar" vuelva a aparecer si realiza un enlace estático.

O podría incluir el CRT y el manifiesto en la misma carpeta, aún así no requiere instalación.

o incluir el Vcredist.exe de VS2010 y tienen un 1 en el instalar

+2

¿No se llamaría esto "no-idea-qué-dll-infierno"? –

+0

Eso vale un punto. :) –

+0

En segundo lugar. Definitivamente vale la pena un punto. –

Cuestiones relacionadas