python二进制可执行文件,带有MSAA的可执行文件
-
11-10-2019 - |
题
我正在使用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
不隶属于 StackOverflow