我正在使用python comtypes来访问MSAA(Microsoft Active Active Accessibility)用法的可访问界面。之后,我们使用Pyinstaller创建二进制可执行文件,因此问题在于特定平台 - Windows XP X64我们的可执行文件挂在退出时。它挂在ole32.dll中的waitfotmultipleObjectx上,该过程出口点被调用 - 它悬挂在我们的系统代码中,甚至悬挂在我们的系统代码中,甚至是pyinstaller boot Loader。在调查过程中,我们找到了问题 - 它是在创建许多可访问的对象(即创建子树) - 如果您这样做会悬挂。想知道其他人是否面临类似的问题?

PS在其他OS上,它可以正常工作。

有帮助吗?

解决方案

我无法清楚地了解当前这个问题的根本原因。但是找到了解决方案,甚至两个。

首先:要添加一个额外的呼叫函数。不知道为什么它可以正常工作,因为ComTypes称其为同时批量化的顾问化。

第二:要更改coinitializeex标志,导致如果设置了coinit_apartmentthreaded(如果未定义sys.coinit_flags,则在comtypes中默认值) - 过程挂起!因此,我选择了COINIT_SPEED_OVER_MEMORY,一切都很好!设置它的最简单方法是在导入comtypes之前进行关注:

import sys
sys.coinit_flags = 0x8 # COINIT_SPEED_OVER_MEMORY == 0x8
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top