MSAAを使用したPythonバイナリ実行可能ファイルは出口に掛けられます
-
11-10-2019 - |
質問
Python Comtypesを使用して、MSAA(Microsoft Active Accessibility)の使用のIACCESSIBLEインターフェイスにアクセスできます。その後、Pyinstallerを使用してバイナリ実行可能ファイルを作成するため、問題は特定のプラットフォームで、Windows XP X64で実行可能なファイルが出口に掛かることです。 Process Exitポイントが呼び出された後、OLE32.dllのwaitfotmultipleObjectsexに吊るします - それは私たちのものではなく、Pyinstaller Boot Loaderでさえシステムコードに掛けられます。調査中、私たちは問題を見つけました - それは多くのiaccesableオブジェクトを作成することです(すなわち、子供の木の作成) - あなたがそれを行うと、プロセスがハングします。他の誰かが同様の問題に直面したかどうか知りたいですか?
PS他のOSでは正常に動作します。
解決
現在、この問題の根本的な理由を明確に理解することはできません。しかし、解決策が見つかりました。
最初:Counitialize関数に追加の呼び出しを追加します。 ComtypesがCoinitializeと同じ時間にCONINitializeを呼び出すために機能する理由がわかりません。
2番目:coinitializeexフラグを変更するには、coinit_apartmentthreadedが設定されている場合(sys.coinit_flagsが定義されていない場合、comtypesのデフォルト値です) - プロセスがハングします!だから私はcoinit_speed_over_memoryを選択しました、そしてすべてがうまくいきました!それを設定する最も簡単な方法は、comtypesをインポートする前にフォローすることです。
import sys
sys.coinit_flags = 0x8 # COINIT_SPEED_OVER_MEMORY == 0x8