1

私はPythoncomtypesを使用して、MSAA(Microsoft Active Accessibility)を使用するためのIAccessibleインターフェイスにアクセスしています。その後、pyinstallerを使用してバイナリ実行可能ファイルを作成するため、問題は特定のプラットフォーム(Windows XP x64)で実行可能ファイルが終了時にハングすることです。プロセス出口点が呼び出された後、ole32.dllのWaitFotMultipleObjectsExでハングします。これは、システムコード、またはpyinstallerブートローダーでさえもハングします。調査中に、問題を特定しました。これは、多くのIAccessibleオブジェクトの作成(つまり、子ツリーの作成)にあります。これを行うと、プロセスがハングします。他の誰かが同様の問題に直面したかどうか知りたいですか?

PS他のOSでは正常に動作します。

4

1 に答える 1

0

現在、この問題の根本的な理由を明確に理解することはできません。しかし、解決策は2つでも見つかりました。

最初に:CoUninitialize関数への呼び出しを追加します。comtypesがCoInitializeと同じ時間にCoUninitializeを呼び出すので、なぜそれが機能するのかわかりません。

2番目:CoInitializeExフラグを変更するには、COINIT_APARTMENTTHREADEDが設定されている場合に発生します(sys.coinit_flagsが定義されていない場合はcomtypesのデフォルト値です)-プロセスがハングします!だから私はCOINIT_SPEED_OVER_MEMORYを選択し、すべてがうまくいきました!これを設定する最も簡単な方法は、comtypeをインポートする前に次のことを行うことです。

import sys
sys.coinit_flags = 0x8 # COINIT_SPEED_OVER_MEMORY == 0x8
于 2011-01-18T15:25:53.950 に答える