Python eseguibile binario con MSAA si blocca all'uscita
-
11-10-2019 - |
Domanda
sto usando comtypes pitone per ottenere l'accesso all'interfaccia IAccessible per MSAA (Microsoft Active Accessibility) utilizzo. Dopo che creiamo binario eseguibile utilizzando pyinstaller, quindi il problema è che su specifica piattaforma - Windows XP x64 nostri blocca eseguibili in uscita. Si appende WaitFotMultipleObjectsEx nel ole32.dll dopo il punto di uscita processo è chiamato - si blocca in codice del sistema non nella nostra, o anche pyinstaller boot loader. Durante l'indagine abbiamo individuato il problema - è nella creazione di molti oggetti IAccessible (vale a dire la creazione di albero bambino) - se lo si fa proccess si blocca. Voglio sapere se qualcun altro ha affrontato problemi simili?
P.S. Su altri sistemi operativi funziona benissimo.
Soluzione
Non sono in grado di chiaramente compreso la ragione principale di questo problema attualmente. Ma la soluzione è stata trovata, anche due.
In primo luogo: per aggiungere un'ulteriore chiamata alla funzione CoUninitialize. Non so perché funziona come le chiamate comtypes CoUninitialize gli stessi tempi come CoInitialize.
In secondo luogo: per cambiare le bandiere CoInitializeEx, perché se COINIT_APARTMENTTHREADED è impostato (è il valore predefinito in comtypes se sys.coinit_flags non è definita) - si blocca di processo! Così ho scelto COINIT_SPEED_OVER_MEMORY e tutto è diventato bene! Il modo più semplice per impostare è di fare in seguito prima di importare comtypes:
import sys
sys.coinit_flags = 0x8 # COINIT_SPEED_OVER_MEMORY == 0x8