way unusual the solucion requested r6034 has error application visual-c++ python-2.7 visual-studio-2005 manifest boost-python

visual-c++ - unusual - r6034 error c++



Runtime error R6034 en la aplicaciĆ³n Python incorporada (11)

(Esto podría ser mejor como un comentario que como una respuesta completa, pero mi polvoriento SO cuenta. Todavía no tiene suficientes representantes para eso).

Al igual que el OP, también estaba usando un Python incorporado incrustado 2.7 y algunos otros ensamblajes nativos.

Lo que me complicó fue el hecho de que mi aplicación era una solución .Net med-large que se ejecutaba en IIS Express de 64 bits (VS2013).

Probé Dependency Walker (gran programa, pero demasiado desactualizado para ayudar con esto), y Process Monitor (ProcMon) que probablemente encontró algunas pistas, pero a pesar de que estaba usando filtros, los problemas fueron enterrados en miles de operaciones no relacionadas, mejores filtros pueden haber ayudado).

Sin embargo, ¡ MUCHAS GRACIAS a Michael Cooper! Sus pasos y Process Explorer (procexp) me llevaron rápidamente a una solución que me había estado esquivando todo el día.

Puedo agregar un par de notas a la excelente publicación de Michael.

  • Ignoré (es decir, no me cambié) no solo la carpeta / WinSxS / ... sino también la carpeta / System32 / ...

Finalmente, encontré msvcr90.dll extraído de:

  • C: / Archivos de programa (x86) / Intel / OpenCL SDK / 2.0 / bin / x64

Pasando por mi ruta de acceso encontré el directorio anterior y otro similar que parecía contener versiones de 32 bits. Quité ambos, reinicié y ... TODAVÍA tuve el problema.

Entonces, seguí los pasos de Michael una vez más y descubrí que ahora se cargaba msvcr90.dll desde:

  • C: / Archivos de programa / Intel / iCLS Client /

Pasando por mi ruta nuevamente, encontré la versión anterior y una (x86) de este directorio también. Entonces, eliminé ambos, apliqué los cambios, reinicié VS2013 y ...

¡No más de error R6034!

No puedo evitar sentirme frustrado con Intel por hacer esto. De hecho, encontré en otro sitio en línea un consejo sobre cómo eliminar iCLS Client de la ruta de acceso. Intenté eso, pero el síntoma era el mismo, entonces, pensé que ese no era el problema. Lamentablemente, iCLS Client y OpenCL SDK estaban etiquetando mi iisexpress. Si tuve la suerte de eliminar cualquiera de los dos, el error R6034 permaneció. Tuve que eximirlos a ambos para curar el problema.

¡Gracias de nuevo a Michael Cooper y a todos los demás por su ayuda!

Estoy trabajando en una aplicación que usa Boost.Python para incrustar el intérprete de Python. Esto se usa para ejecutar "scripts" generados por el usuario que interactúan con el programa principal.

Desafortunadamente, un usuario informa el error de tiempo de ejecución R6034 cuando intenta ejecutar un script. El programa principal se inicia bien, pero creo que el problema puede estar ocurriendo cuando se carga python27.dll.

Estoy usando Visual Studio 2005, Python 2.7 y Boost.Python 1.46.1. El problema ocurre solo en la máquina de un usuario. Ya me he enfrentado a problemas manifiestos y logré resolverlos, pero en este caso estoy un poco perdido.

¿Alguien más ha tenido un problema similar? ¿Pudiste resolverlo? ¿Cómo?


Agregando esta respuesta para quien todavía está buscando una solución. ESRI lanzó un parche para este error. Simplemente descargue el parche de su sitio web (no se requiere iniciar sesión), instálelo y resolverá el problema. Descargué el parche para 10.4.1 pero también hay parches para otras versiones.


En mi caso, la reconstrucción de las bibliotecas vinculadas y el proyecto principal con una configuración de proyecto de "bibliotecas de ejecución en tiempo de ejecución" similar ayudaron. Espero que sea útil para cualquiera.


En mi caso, me di cuenta de que el problema venía cuando, después de compilar la aplicación en un archivo exe, cambiaría el nombre de ese archivo. Entonces, al dejar el nombre original del archivo exe no se muestra el error.


Encontré la solución al problema. Esperemos que esto ayude a alguien más: estos problemas pueden ser tan frustrantes de depurar.

El problema fue causado por un software de terceros que se había agregado a la ruta e instalado msvcr90.dll en su carpeta de programa. En este caso, el problema fue causado por el Cliente iCLS de Intel.

Entonces ... ¿Cómo encontrar el problema en situaciones similares?

  1. Descargue Process Explorer here .

  2. Inicie su aplicación y reproduzca el error de tiempo de ejecución R6034.

  3. Inicie Process Explorer. En el menú "Ver", vaya a "Vista del panel inferior" y elija "DLL".

  4. En el panel superior, ubique su aplicación y haga clic en ella. El panel inferior debería mostrar una lista de DLLS cargados para su aplicación.

  5. Ubique "msvcr ??. Dll" en la lista. Debería haber varios. Busque el que no está en la carpeta "winsxs" y anótelo.

  6. Ahora, verifique la ruta justo antes de que se ejecute su aplicación. Si incluye la carpeta que anotó en el paso 5, probablemente haya encontrado al culpable.

¿Como solucionar el problema? Tendrá que eliminar la entrada ofensiva de la ruta antes de ejecutar su programa. En mi caso, no necesito nada más en la ruta, así que escribí un archivo por lotes simple que se ve así:

path= myprogram.exe

Eso es. El archivo de proceso por lotes simplemente borra la ruta de acceso antes de que se ejecute mi programa, de modo que no se encuentra la DLL de tiempo de ejecución en conflicto.

¡Espero que esto ayude!


Esta publicación detalla @Micheal Cooper y @frmdstryr. Una vez que haya identificado las entradas de PATH problemáticas, puede colocar lo siguiente delante de un script de python , asumiendo que iCLS Client y CMake son problemáticos.

import os for forbidden_substring in [''iCLS Client'', ''CMake'']: os.environ[''PATH''] = '';''.join([item for item in os.environ[''PATH''].split('';'') if not item.lower().find(forbidden_substring.lower()) >= 0])

Con respecto al caso vim con YouCompleteMe , puede poner lo siguiente en la parte superior de su vimrc :

python << EOF import os for forbidden_substring in [''iCLS Client'', ''CMake'']: os.environ[''PATH''] = '';''.join([item for item in os.environ[''PATH''].split('';'') if not item.lower().find(forbidden_substring.lower()) >= 0]) EOF

Si ninguna de estas soluciones es aplicable para usted, puede tratar de eliminar el problema que causa las entradas de su ruta de forma manual, pero desea asegurarse de no romper nada más en su sistema que dependa de estas entradas PATH. Así que, por ejemplo, para CMake podrías intentar eliminar su entrada PATH, y solo poner un enlace simbólico (o similar) apuntando al binario cmake.exe en algún otro directorio que esté en tu RUTA, para asegurarte de que cmake aún pueda ejecutarse de donde sea.


Esta publicación se basa en @Micheal Cooper y @frmdstryr y ofrece una mejor alternativa que mi respuesta anterior. Puede colocar lo siguiente delante de una secuencia de comandos python para purgar las entradas problemáticas.

import os, re path = os.environ[''PATH''].split('';'') def is_problem(folder): try: for item in os.listdir(folder): if re.match(r''msvcr/d/d/.dll'', item): return True except: pass return False path = [folder for folder in path if not is_problem(folder)] os.environ[''PATH''] = '';''.join(path)

Para el vim con el caso YouCompleteMe , puede poner lo siguiente en la parte superior de su vimrc :

python << EOF import os, re path = os.environ[''PATH''].split('';'') def is_problem(folder): try: for item in os.listdir(folder): if re.match(r''msvcr/d/d/.dll'', item): return True except: pass return False path = [folder for folder in path if not is_problem(folder)] os.environ[''PATH''] = '';''.join(path) EOF


Gracias por la solución. Poco modifiqué este código de muestra ya que la variable de ruta en mi sistema contiene la cadena "CLIENTE ICLS" en lugar de "Cliente iCLS"

import os # print os.environ[''PATH''] # Remove CLS Client from system path if os.environ[''PATH''].find("iCLS Client") >= 0 or os.environ[''PATH''].find("ICLS CLIENT") >= 0: os.environ[''PATH''] = "".join([it for it in os.environ[''PATH''].split(";") if not (it.find("iCLS Client")>0 or it.find("ICLS CLIENT")>0)])


La discusión en esta página implica hacer cosas muy avanzadas sobre mí. (No código.) Sin embargo, ejecuté Process Explorer como el diagnóstico recomendado. Descubrí que otro programa usa y necesita msvcr90.dll en su carpeta de programas. No comprendiendo nada más que se discuta aquí, como una loca suposición moví temporalmente el dll a una carpeta de programa vecina.

Problema resuelto. End of Runtime error message.

(Moví el dll hacia atrás cuando terminé con el programa que generaba el mensaje de error).

Gracias a todos por su ayuda e ideas.


Una solución más general es:

import os os.environ[''path''] = ";".join( [path for path in os.environ[''path''].split(";") if "msvcr90.dll" not in map((lambda x:x.lower()), os.listdir(path))])

(Tuve el mismo problema con VanDyke SecureCRT)


Utilizando la respuesta de Michael anterior, pude resolver esto sin un archivo bat al agregar:

import os # Remove CLS Client from system path if os.environ[''PATH''].find("iCLS Client")>=0: os.environ[''PATH''] = "".join([it for it in os.environ[''PATH''].split(";") if not it.find("iCLS Client")>0])

al archivo python principal de la aplicación. Solo se asegura de que la ruta del sistema no incluya las rutas que estaban causando el problema antes de que se importen las bibliotecas que cargaron los dll.

¡Gracias!