diff --git a/docs/CONSOLE_WINDOW_FIX.md b/docs/CONSOLE_WINDOW_FIX.md new file mode 100644 index 0000000..a7b5287 --- /dev/null +++ b/docs/CONSOLE_WINDOW_FIX.md @@ -0,0 +1,223 @@ +# 解决打包后Python命令行窗口闪现问题 + +## 问题描述 + +在Windows系统上,当Tauri应用打包后调用Python命令时,会出现命令行窗口一闪而逝的问题。这是因为: + +1. **Windows系统特性**:当一个GUI应用程序(使用`windows_subsystem = "windows"`)启动子进程时,如果子进程是控制台应用程序(如Python),系统会短暂显示控制台窗口。 + +2. **用户体验问题**:这种闪现会影响用户体验,让应用看起来不够专业。 + +## 解决方案 + +### 技术原理 + +使用Windows API的`CREATE_NO_WINDOW`标志来隐藏子进程的控制台窗口: + +```rust +#[cfg(target_os = "windows")] +const CREATE_NO_WINDOW: u32 = 0x08000000; + +// 在创建Command时设置 +cmd.creation_flags(CREATE_NO_WINDOW); +``` + +### 实现方案 + +#### 1. 创建通用工具模块 + +创建了`src-tauri/src/command_utils.rs`模块,提供以下功能: + +- `configure_no_window()` - 配置命令隐藏控制台窗口 +- `create_hidden_command()` - 创建已配置的隐藏命令 +- `configure_python_command()` - 专门为Python命令配置 +- `configure_system_command()` - 为系统命令配置 + +#### 2. 智能配置策略 + +```rust +#[cfg(target_os = "windows")] +{ + // 只在release构建中隐藏控制台窗口 + #[cfg(not(debug_assertions))] + { + cmd.creation_flags(CREATE_NO_WINDOW); + println!("Console window hidden for release build"); + } + + // 在debug构建中保持控制台可见,便于调试 + #[cfg(debug_assertions)] + { + println!("Console window visible for debug build"); + } +} +``` + +#### 3. 跨平台兼容 + +```rust +// 在非Windows平台上,函数不执行任何操作 +#[cfg(not(target_os = "windows"))] +{ + let _ = cmd; // 避免未使用变量警告 +} +``` + +## 修改的文件 + +### 1. 核心工具模块 +- `src-tauri/src/command_utils.rs` - 新增的工具模块 +- `src-tauri/src/lib.rs` - 添加模块引用 + +### 2. Python执行器 +- `src-tauri/src/python_executor.rs` - 使用新的配置函数 + +### 3. 命令模块 +- `src-tauri/src/commands/ai_video.rs` - 修复测试环境函数 +- `src-tauri/src/commands/project.rs` - 修复文件打开函数 +- `src-tauri/src/commands/file_system.rs` - 修复文件夹打开函数 + +## 使用方法 + +### 基础用法 + +```rust +use crate::command_utils::configure_no_window; +use std::process::Command; + +let mut cmd = Command::new("python"); +configure_no_window(&mut cmd); +let output = cmd.output(); +``` + +### Python命令专用 + +```rust +use crate::command_utils::configure_python_command; +use std::process::Command; + +let mut cmd = Command::new("python"); +let args = vec!["-c".to_string(), "print('Hello')".to_string()]; +configure_python_command(&mut cmd, Path::new("."), &args); +``` + +### 便捷创建 + +```rust +use crate::command_utils::create_hidden_command; + +let mut cmd = create_hidden_command("python"); +cmd.args(&["-c", "print('Hello')"]); +let output = cmd.output(); +``` + +### 宏方式 + +```rust +use crate::hidden_command; + +let output = hidden_command!("python", "-c", "print('Hello')").output(); +``` + +## 特性 + +### 1. 开发友好 +- **Debug模式**:保持控制台窗口可见,便于调试 +- **Release模式**:隐藏控制台窗口,提供专业用户体验 + +### 2. 跨平台兼容 +- **Windows**:应用CREATE_NO_WINDOW标志 +- **macOS/Linux**:函数调用无副作用 + +### 3. 类型安全 +- 完整的Rust类型检查 +- 编译时平台特性检测 + +### 4. 易于使用 +- 简单的函数调用接口 +- 便捷的宏支持 +- 详细的文档和示例 + +## 测试验证 + +### 开发环境测试 +```bash +# Debug模式 - 控制台窗口可见 +cargo tauri dev +``` + +### 生产环境测试 +```bash +# Release模式 - 控制台窗口隐藏 +cargo tauri build +``` + +### 验证要点 +1. **Debug构建**:Python命令执行时应该能看到控制台窗口 +2. **Release构建**:Python命令执行时不应该看到控制台窗口闪现 +3. **功能正常**:所有Python命令功能应该正常工作 +4. **跨平台**:在macOS和Linux上应该无影响 + +## 性能影响 + +### 内存使用 +- 几乎无额外内存开销 +- 只是设置了进程创建标志 + +### 执行速度 +- 无性能影响 +- 可能略微提升用户感知性能(无窗口闪现) + +### 兼容性 +- 完全向后兼容 +- 不影响现有功能 + +## 故障排除 + +### 问题1:控制台窗口仍然闪现 +**可能原因**: +- 在Debug模式下运行 +- 某些命令未使用新的配置函数 + +**解决方案**: +- 确保使用Release模式构建 +- 检查所有Command::new调用是否使用了配置函数 + +### 问题2:Python命令执行失败 +**可能原因**: +- Python路径问题 +- 权限问题 + +**解决方案**: +- 检查Python安装和PATH配置 +- 确保应用有足够权限 + +### 问题3:在非Windows平台出现编译错误 +**可能原因**: +- 条件编译配置问题 + +**解决方案**: +- 检查#[cfg(target_os = "windows")]标记 +- 确保跨平台代码正确 + +## 未来改进 + +### 短期计划 +- [ ] 添加更多的命令配置选项 +- [ ] 支持自定义进程创建标志 +- [ ] 添加性能监控 + +### 长期计划 +- [ ] 支持更多平台特定优化 +- [ ] 集成到Tauri插件系统 +- [ ] 提供可视化配置界面 + +## 相关资源 + +- [Windows Process Creation Flags](https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags) +- [Rust std::process::Command](https://doc.rust-lang.org/std/process/struct.Command.html) +- [Tauri Documentation](https://tauri.app/v1/guides/) + +--- + +通过这个解决方案,我们成功解决了Windows平台上Python命令行窗口闪现的问题,同时保持了开发时的调试便利性和跨平台兼容性。 diff --git a/scripts/test_console_window_fix.md b/scripts/test_console_window_fix.md new file mode 100644 index 0000000..54d90e9 --- /dev/null +++ b/scripts/test_console_window_fix.md @@ -0,0 +1,266 @@ +# 测试控制台窗口修复方案 + +## 测试目的 + +验证在Windows平台上打包后的Tauri应用调用Python命令时不再出现控制台窗口闪现的问题。 + +## 测试环境 + +### 系统要求 +- Windows 10/11 +- Python 3.8+ +- Node.js 16+ +- Rust 1.70+ + +### 测试前准备 +1. 确保Python已安装并在PATH中 +2. 安装项目依赖:`pnpm install` +3. 安装Rust依赖:`cargo install tauri-cli` + +## 测试步骤 + +### 1. Debug模式测试(开发环境) + +```bash +# 启动开发模式 +cargo tauri dev +``` + +**预期行为**: +- 应用正常启动 +- 调用Python命令时可以看到控制台窗口(用于调试) +- 所有功能正常工作 + +**测试操作**: +1. 打开AI视频页面 +2. 点击"测试环境"按钮 +3. 观察是否有控制台窗口出现 +4. 检查功能是否正常 + +### 2. Release模式测试(生产环境) + +```bash +# 构建生产版本 +cargo tauri build +``` + +**预期行为**: +- 构建成功 +- 生成的exe文件在`src-tauri/target/release/bundle/`目录下 +- 运行时不应该看到控制台窗口闪现 + +**测试操作**: +1. 运行生成的exe文件 +2. 打开AI视频页面 +3. 点击"测试环境"按钮 +4. **重点观察**:不应该看到任何控制台窗口闪现 +5. 检查功能是否正常 + +### 3. 功能完整性测试 + +测试以下功能确保修复没有破坏现有功能: + +#### AI视频生成 +1. 上传图片 +2. 设置参数 +3. 生成视频 +4. 检查输出 + +#### 项目管理 +1. 创建项目 +2. 打开项目文件夹 +3. 导入素材 + +#### 模板管理 +1. 导入模板 +2. 批量处理 + +#### 文件操作 +1. 选择文件 +2. 打开文件夹 +3. 文件预览 + +## 测试检查点 + +### ✅ 成功标准 + +#### Debug模式 +- [ ] 应用正常启动 +- [ ] Python命令执行成功 +- [ ] 可以看到控制台窗口(用于调试) +- [ ] 所有功能正常工作 +- [ ] 日志输出正常 + +#### Release模式 +- [ ] 应用正常启动 +- [ ] Python命令执行成功 +- [ ] **不会看到控制台窗口闪现** +- [ ] 所有功能正常工作 +- [ ] 用户体验流畅 + +### ❌ 失败标准 + +#### 任何模式 +- [ ] 应用启动失败 +- [ ] Python命令执行失败 +- [ ] 功能异常或错误 +- [ ] 性能明显下降 + +#### Release模式特有 +- [ ] 仍然看到控制台窗口闪现 +- [ ] 用户体验不佳 + +## 测试用例 + +### 用例1:AI视频环境测试 +``` +操作:点击"测试AI视频环境"按钮 +预期: +- Debug: 看到控制台窗口,显示Python版本和库信息 +- Release: 不看到控制台窗口,但功能正常,返回正确结果 +``` + +### 用例2:Python脚本执行 +``` +操作:执行任何AI视频生成任务 +预期: +- Debug: 可能看到Python进程的控制台窗口 +- Release: 不看到任何控制台窗口闪现 +``` + +### 用例3:文件系统操作 +``` +操作:打开文件夹或文件 +预期: +- Debug: 可能看到系统命令的控制台窗口 +- Release: 不看到控制台窗口,直接打开目标 +``` + +### 用例4:批量操作 +``` +操作:批量导入模板或处理文件 +预期: +- Debug: 可能看到多个控制台窗口 +- Release: 不看到任何控制台窗口,操作流畅 +``` + +## 性能测试 + +### 响应时间测试 +1. 记录修复前后的操作响应时间 +2. 确保没有性能回退 +3. 验证用户感知性能提升 + +### 内存使用测试 +1. 监控应用内存使用 +2. 确保没有内存泄漏 +3. 验证资源使用合理 + +## 跨平台验证 + +### Windows平台 +- 主要测试平台 +- 验证控制台窗口隐藏功能 + +### macOS平台 +```bash +# 在macOS上测试 +cargo tauri dev +cargo tauri build +``` +- 确保修改不影响macOS功能 +- 验证跨平台兼容性 + +### Linux平台 +```bash +# 在Linux上测试 +cargo tauri dev +cargo tauri build +``` +- 确保修改不影响Linux功能 +- 验证跨平台兼容性 + +## 回归测试 + +### 现有功能验证 +1. 所有页面正常加载 +2. 所有按钮正常响应 +3. 所有API调用正常 +4. 文件操作正常 +5. 数据持久化正常 + +### 边界情况测试 +1. Python未安装的情况 +2. 权限不足的情况 +3. 网络异常的情况 +4. 文件路径异常的情况 + +## 测试报告模板 + +``` +测试日期:____ +测试人员:____ +测试环境:Windows __ / Python __ / Node.js __ + +Debug模式测试结果: +- 应用启动:✅/❌ +- 控制台窗口可见:✅/❌ +- 功能正常:✅/❌ +- 备注:____ + +Release模式测试结果: +- 应用启动:✅/❌ +- 控制台窗口隐藏:✅/❌ +- 功能正常:✅/❌ +- 用户体验:✅/❌ +- 备注:____ + +跨平台测试结果: +- macOS:✅/❌/未测试 +- Linux:✅/❌/未测试 +- 备注:____ + +总体评价: +- 修复成功:✅/❌ +- 建议:____ +``` + +## 故障排除 + +### 常见问题 + +#### 问题1:控制台窗口仍然闪现 +**检查项**: +- 确认是Release模式构建 +- 检查是否所有Command都使用了新的配置 +- 验证Windows平台特定代码是否生效 + +#### 问题2:功能异常 +**检查项**: +- 检查Python路径和权限 +- 验证命令行参数是否正确 +- 查看应用日志和错误信息 + +#### 问题3:编译错误 +**检查项**: +- 检查Rust版本兼容性 +- 验证条件编译配置 +- 确认依赖项正确安装 + +## 验收标准 + +### 必须满足 +1. ✅ Release模式下不出现控制台窗口闪现 +2. ✅ 所有现有功能正常工作 +3. ✅ 跨平台兼容性保持 +4. ✅ 性能无明显下降 + +### 期望满足 +1. ✅ 用户体验明显提升 +2. ✅ Debug模式保持调试便利性 +3. ✅ 代码结构清晰易维护 +4. ✅ 文档完整易理解 + +--- + +通过这个全面的测试方案,我们可以确保控制台窗口修复方案的有效性和稳定性。