Pregunta

Estoy usando comtypes pitón para obtener acceso a la interfaz de IAccessible para MSAA (Microsoft Active Accessibility) uso. Después de que nosotros creamos ejecutable binario usando PyInstaller, por lo que el problema es que en la plataforma específica - Windows XP x64 nuestros cuelga ejecutables en la salida. Se cuelga en WaitFotMultipleObjectsEx en ole32.dll después del punto de salida del proceso se llama - se cuelga en el código del sistema no en nuestra, o cargador de arranque, incluso PyInstaller. Durante la investigación localizamos el problema - es en la creación de muchos objetos IAccessible (es decir, la creación de árbol de niño) - si lo hace Proccess cuelga. Quiero saber si alguien más se enfrentó a un problema similar?

P.S. En otros sistemas operativos que trabaja muy bien.

¿Fue útil?

Solución

No soy capaz de entenderse con claridad la razón principal de este problema actualmente. Sin embargo, la solución se encuentra, incluso dos.

En primer lugar: para añadir una llamada adicional a la función CoUninitialize. No sabe por qué funciona como las llamadas comtypes CoUninitialize los mismos tiempos que CoInitialize.

Segundo: para cambiar las banderas CoInitializeEx, porque si se establece COINIT_APARTMENTTHREADED (que es el valor por defecto en comtypes Si no se define sys.coinit_flags) - cuelga del proceso! Así que he elegido COINIT_SPEED_OVER_MEMORY y todo se hizo bien! La forma más fácil de configurar que es hacer lo siguiente antes de importar comtypes:

import sys
sys.coinit_flags = 0x8 # COINIT_SPEED_OVER_MEMORY == 0x8
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top