Question

J'utilise comtypes python pour avoir accès à l'interface IAccessible pour l'utilisation MSAA (Microsoft Active Accessibility). Après cela, nous créons exécutable binaire en utilisant pyinstaller, de sorte que le problème est que sur la plate-forme spécifique - Windows XP x64 nos exécutables bloque la sortie. Il se bloque sur WaitFotMultipleObjectsEx dans ole32.dll après le point de sortie du processus est appelé - il se bloque dans le code du système pas dans notre, ou même pyinstaller chargeur de démarrage. Au cours de l'enquête nous avons trouvé le problème - il est dans la création de nombreux objets IAccessible (à savoir la création de l'arbre de l'enfant) - si vous le faites Proccess se bloque. Vous voulez savoir si quelqu'un d'autre face problème similaire?

P.S. Sur d'autres systèmes d'exploitation, il fonctionne très bien.

Était-ce utile?

La solution

Je ne suis pas en mesure de comprendre clairement la raison fondamentale de cette question actuellement. Mais on a trouvé la solution, même deux.

Tout d'abord: pour ajouter un appel supplémentaire à la fonction CoUninitialize. Je ne sais pas pourquoi cela fonctionne comme les appels comtypes CoUnInitialize les mêmes moments que CoInitialize.

Deuxième: changer les drapeaux CoInitializeEx, parce que si COINIT_APARTMENTTHREADED est réglé (il est la valeur par défaut dans comtypes si sys.coinit_flags n'est pas défini) - processus se bloque! Donc, j'ai choisi COINIT_SPEED_OVER_MEMORY et tout est devenu bien! La meilleure façon de le régler est de faire ce qui suit avant comtypes importation:

import sys
sys.coinit_flags = 0x8 # COINIT_SPEED_OVER_MEMORY == 0x8
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top