- Add wxauto package with WeChat UI automation and message handling capabilities - Implement job_extractor.py for automated job posting extraction from WeChat groups - Add job_extractor_gui.py providing graphical interface for job extraction tool - Create comprehensive documentation in Chinese covering GUI usage, multi-group support, and quick start guides - Add build configuration files (build_exe.py, build_exe.spec) for packaging as standalone executable - Include utility scripts for WeChat interaction (auto_send_msg.py, get_history.py, receive_file_transfer.py) - Add project configuration files (pyproject.toml, setup.cfg, requirements.txt) - Include test files (test_api.py, test_com_fix.py) for API and compatibility validation - Add Apache 2.0 LICENSE and comprehensive README documentation - Configure .gitignore to exclude build artifacts, logs, and temporary files
160 lines
3.3 KiB
Markdown
160 lines
3.3 KiB
Markdown
# 打包问题修复说明
|
||
|
||
## 问题描述
|
||
|
||
打包后的exe运行时报错:
|
||
```
|
||
[WinError -2147221008] 尚未调用 CoInitialize。
|
||
```
|
||
|
||
## 问题原因
|
||
|
||
这是因为wxauto使用了Windows的COM组件(UIAutomation),在多线程环境中需要显式初始化COM组件。打包后的exe环境与开发环境不同,需要手动初始化。
|
||
|
||
## 解决方案
|
||
|
||
### 1. 安装pywin32
|
||
|
||
```bash
|
||
pip install pywin32
|
||
```
|
||
|
||
### 2. 代码修改
|
||
|
||
在 `job_extractor_gui.py` 中:
|
||
|
||
1. 导入pythoncom模块:
|
||
```python
|
||
import pythoncom
|
||
```
|
||
|
||
2. 在线程函数中初始化COM:
|
||
```python
|
||
def run_task(self):
|
||
# 初始化COM组件(每个线程都需要)
|
||
pythoncom.CoInitialize()
|
||
|
||
try:
|
||
# 原有代码...
|
||
pass
|
||
finally:
|
||
# 清理COM组件
|
||
pythoncom.CoUninitialize()
|
||
```
|
||
|
||
### 3. 更新打包配置
|
||
|
||
在 `build_exe.spec` 中添加pywin32相关模块:
|
||
```python
|
||
hiddenimports=[
|
||
# ... 其他模块
|
||
'pythoncom',
|
||
'pywintypes',
|
||
'win32com',
|
||
'win32com.client',
|
||
'win32api',
|
||
'win32con',
|
||
'win32gui',
|
||
'win32process',
|
||
],
|
||
```
|
||
|
||
## 重新打包步骤
|
||
|
||
### 方法一:使用批处理脚本(推荐)
|
||
|
||
1. 双击运行 `build.bat`
|
||
2. 脚本会自动检查并安装pywin32
|
||
3. 等待打包完成
|
||
|
||
### 方法二:手动打包
|
||
|
||
```bash
|
||
# 1. 安装依赖
|
||
pip install pywin32 pyinstaller
|
||
|
||
# 2. 清理旧文件
|
||
rmdir /s /q build dist
|
||
|
||
# 3. 打包
|
||
pyinstaller build_exe.spec
|
||
|
||
# 4. 测试
|
||
dist\微信岗位提取工具.exe
|
||
```
|
||
|
||
## 验证修复
|
||
|
||
1. 运行打包后的exe
|
||
2. 配置目标群组和API密钥
|
||
3. 点击"开始任务"
|
||
4. 如果能正常连接微信并监听,说明修复成功
|
||
|
||
## 其他可能的问题
|
||
|
||
### 问题1:缺少DLL文件
|
||
|
||
如果提示缺少某些DLL文件,可能需要:
|
||
- 安装 Visual C++ Redistributable
|
||
- 或使用 `--collect-all pywin32` 选项
|
||
|
||
### 问题2:杀毒软件拦截
|
||
|
||
某些杀毒软件可能会拦截打包后的exe:
|
||
- 添加到白名单
|
||
- 或临时关闭杀毒软件
|
||
|
||
### 问题3:权限问题
|
||
|
||
如果提示权限不足:
|
||
- 以管理员身份运行
|
||
- 检查文件夹权限
|
||
|
||
## 测试清单
|
||
|
||
打包完成后,请测试以下功能:
|
||
|
||
- [ ] 程序能正常启动
|
||
- [ ] 配置能正常保存
|
||
- [ ] 能连接微信
|
||
- [ ] 能添加监听
|
||
- [ ] 能接收消息
|
||
- [ ] 能提取岗位信息
|
||
- [ ] 能显示在列表中
|
||
- [ ] 能查看详情
|
||
- [ ] 能导出数据
|
||
|
||
## 技术说明
|
||
|
||
### COM组件初始化
|
||
|
||
COM(Component Object Model)是Windows的组件技术。使用COM组件的程序需要:
|
||
|
||
1. **单线程公寓(STA)**:主线程自动初始化
|
||
2. **多线程公寓(MTA)**:每个线程需要手动初始化
|
||
|
||
wxauto使用UIAutomation(基于COM),在GUI程序的工作线程中需要:
|
||
- 调用 `pythoncom.CoInitialize()` 初始化
|
||
- 调用 `pythoncom.CoUninitialize()` 清理
|
||
|
||
### PyInstaller打包
|
||
|
||
PyInstaller打包时需要注意:
|
||
- 显式声明隐藏导入(hiddenimports)
|
||
- 包含数据文件(datas)
|
||
- 收集所有相关包(collect-all)
|
||
|
||
## 参考资料
|
||
|
||
- [PyWin32 文档](https://github.com/mhammond/pywin32)
|
||
- [PyInstaller 文档](https://pyinstaller.org/)
|
||
- [COM 初始化](https://docs.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-coinitialize)
|
||
|
||
## 更新日志
|
||
|
||
### 2026-02-11
|
||
- 修复COM组件初始化问题
|
||
- 添加pywin32依赖
|
||
- 更新打包配置
|
||
- 完善错误处理
|