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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top