You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyWin32在Win11默认终端(PowerShell)运行打包EXE时抛出"pywintypes com_error call was rejected"错误,但CMD运行正常

PyWin32在Win11默认终端(PowerShell)运行打包EXE时抛出"pywintypes com_error call was rejected"错误,但CMD运行正常

系统环境

  • 开发机:Win10,Python 3.7.7,PyInstaller 5.3.12
  • 部署机:Win11,未安装Python

脚本功能与初始运行情况

我写了一个Windows CMD下运行的CLI Python脚本,逻辑很简单:

  • 启动时用filedialog.askopenfilename()弹出TKinter的“选择文件”GUI对话框
  • 选中.xlsx文件后,用win32com.client.Dispatch('Excel.Application')打开MS Excel
  • 后台进入while(1)循环,等待用户按空格键
  • 用户按空格键时,用ExcelApp.ActiveCell.Value = <某个数字>往Excel活动单元格写入数字
  • 用ExcelApp.ActiveCell.GetOffset(1,0).Select()把活动单元格光标下移一行

直接用python myScript.py跑.py脚本时完全正常,甚至能往OneDrive同步文件夹里的.xlsx文件写内容,毫无问题。

因为部署机无法安装Python(无管理员权限),我用PyInstaller将脚本打包成独立EXE,命令如下:

python -m PyInstaller --noconfirm --onedir --console "myScript.py"

2024年1月部署到Win11机后,整整一年都运行完美,没任何问题。结果到2024年12月27号,它突然毫无征兆地抛出了以下异常:

File "win32com\client\dynamic.py line 627, in _getattr__
pywintypes com_error: (-2147418111, 'Call was rejected by callee, none, none)

排查测试过程

我立刻做了几个测试,试图定位问题:

  1. 把部署机上的myScript.exe拷回开发机运行:成功
  2. 在开发机重新打包脚本,将新生成的EXE拷到部署机运行:失败!抛出同样异常
  3. 在开发机重新打包脚本,拷到部署机后用CMD运行:成功

一开始以为是随机偶发问题,直到注意到部署机上EXE是在“终端”里运行的。我平时没怎么用过Win11,查了下才发现:

  • Win11的“终端”是个“壳中壳”,替代Win7/10里的CMD来运行各类命令行程序
  • Win11终端默认启动PowerShell
  • 正是PowerShell导致了这个异常——用CMD运行就完全没问题

我临时写了个.bat文件让EXE在CMD里运行,但这显然不是根本解决办法。

疑问点

我想搞明白两个核心问题:

  1. Win11终端为啥默认用PowerShell运行CLI程序?毕竟PowerShell和CMD本质差异很大,兼容性没保障啊...
  2. PowerShell为啥会导致win32com抛出“被调用方拒绝调用”的异常?是安全策略或者执行权限的问题吗?我见过类似问题,但大多只给了临时 workaround,没讲清楚底层原因。

备注:内容来源于stack exchange,提问作者Noideas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:29:37