Pregunta

Gosh, esto es tan raro, no sé qué decir. La versión corta es que tengo una aplicación de simulador que he desovar desde mi aplicación cuando el usuario me pide. Recientemente se ha dejado de funcionar, aunque puedo ejecutar el simulador bien desde la línea de comandos o en el menú Inicio. Esto podría ser debido a trasladarse a VS2010 o Windows 7 o algo que no se dio cuenta la revisión de las diferenciaciones de control de origen.

Tengo un segundo simulador de la que trato de desove de la misma manera y funciona bien.

Por defecto, estoy usando envoltorio QProcess de Qt3 alrededor CreateProcess para este propósito, pero me sale el mismo comportamiento utilizando el sistema, mi propia CreateProcess y ShellExecute.

ShellExecute de un cmd.exe "params / c de aplicación" hace proporcionarme algo más de información, sin embargo. Me sale el cuadro de diálogo

  

"El programa no puede iniciarse porque MSVCR80.dll no se encuentra en su computadora. Intente reinstalar el programa para corregir este problema."

poco conveniente, tanto en la solicitud principal y el segundo uso del simulador MSVCR80.dll.

Al copiar MSVC * 80.dll desde g: \ windows \ winsxs \ x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5 en el mismo directorio como mi ejecutable, cambia el mensaje de error a

  

"Tiempo de ejecución Error!
  Programa: g: \ ruta \ a \ app.exe
  R6034
  Una aplicación ha hecho un intento de cargar la biblioteca de tiempo de ejecución C incorrectamente.
  Por favor, póngase en contacto con el equipo de soporte de la aplicación para obtener más información.

Seguido por

  

La aplicación no pudo iniciar correctamente (0xc0000142). Haga clic en OK para cerrar la aplicación.

Y, una vez más, la aplicación funciona muy bien desde la línea de comandos con los dlls en su lugar.


Actualización:

Yo sospechaba tal vez estaba relacionado medio ambiente, por lo que cambió mi mecanismo de ShellExecute hacer params cmd / c && conjunto de aplicaciones. He creado un cmd.exe con esos mismos parametros y mi aplicación es ahora chocando de manera similar. Se actualizará cuando me entender por qué:)

Es una herramienta de tiempo de ejecución del componente MATLAB que está modificando la variable PATH de mi proceso para mal efecto. Se prepending su propio directorio completo de DLL y causando estragos.

¿Fue útil?

Solución

Una herramienta tonta que estaba usando hizo un setenv en el camino, anteponiendo un directorio que quería para cargar dinámicamente algunos archivos DLL, pero que perdió mi solicitud posterior. Terminé usando GetEnvironmentStrings como se muestra en el último ejemplo aquí , borrando la primera entrada en el PATH env var, y enviando el nuevo entorno (original) para QProcess, que envuelve CreateProcessA.

Otros consejos

Es necesario instalar el CRT

Este puede trabajo - si se rompe, se llega a mantener las dos piezas: -)

Trate de instalar VC ++ redistribuible de aquí - http://www.microsoft.com/downloads/en/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en .

Recuerde hacer copias de seguridad de su sistema, crear un punto de restauración antes de instalar etc. cosas.

Otra idea -probar volver a instalar el propio Appliacation fallar. Puede venir con su propia copia de redistributables VC ++, y volver a instalar ayuda fuerza. Esp. tratando de volver a instalarlo usando el modo de Compatibilidad de Windows 7 (tal vez volver a Vista o XP compatibilidad) podría ser aún más eficaz.

Para reiterar - que tendrá que tratar, y he ni idea de si alguna de las ideas anteriores te hará bien, o incluso estar seguro de no hacer daño. Dicho esto, si me encontré con un problema similar, estos son los pasos que iba a tratar. HTH!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top