Frage

Ich verwende Python comtypes Zugriff auf IAccessible Schnittstelle für MSAA (Microsoft Active Accessibility) Nutzung zu erhalten. Danach haben wir ausführbare Binärdatei mit pyinstaller erstellen, so das Problem, dass auf bestimmte Plattform - Windows XP unsere ausführbare hängt beim Beenden x64. Es hängt an WaitFotMultipleObjectsEx in ole32.dll, nachdem der Prozess Austrittspunkt genannt wird - es hängt im Systemcode nicht in unserem oder sogar pyinstaller Bootloader. Bei der Untersuchung liegt das Problem - es viele IAccessible Objekte zu schaffen (das heißt die Schaffung Kind Baum) ist - wenn Sie es tun Proccess hängt. Möchten Sie wissen, wenn jemand anderes ähnliches Problem konfrontiert?

P. S. Bei anderen Betriebssystemen funktioniert es gut.

War es hilfreich?

Lösung

Ich bin eindeutig nicht in der Lage zur Zeit die Wurzel Grund dieses Problems zu verstehen. Aber die Lösung gefunden wurde, sogar zwei.

Erstens: ein zusätzlichen Aufruf CoUninitialize Funktion hinzuzufügen. Sie wissen nicht, warum es funktioniert, da die comtypes Anrufe die gleichen Zeiten wie CoInitialize CoUninitialize.

Zweitens: CoInitializeEx Flags zu ändern, denn wenn COINIT_APARTMENTTHREADED gesetzt ist (es ist Standardwert in comtypes wenn sys.coinit_flags nicht definiert ist) - Prozess hängt! Also habe ich gewählt COINIT_SPEED_OVER_MEMORY und alles wurde gut! Der einfachste Weg, es zu setzen, ist folgendes zu tun, bevor comtypes importieren:

import sys
sys.coinit_flags = 0x8 # COINIT_SPEED_OVER_MEMORY == 0x8
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top