This commit is contained in:
root 2025-07-11 14:01:12 +08:00
parent 954c0c457d
commit ea5090c891
2 changed files with 489 additions and 0 deletions

223
docs/CONSOLE_WINDOW_FIX.md Normal file
View File

@ -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调用是否使用了配置函数
### 问题2Python命令执行失败
**可能原因**
- 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命令行窗口闪现的问题同时保持了开发时的调试便利性和跨平台兼容性。

View File

@ -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模式特有
- [ ] 仍然看到控制台窗口闪现
- [ ] 用户体验不佳
## 测试用例
### 用例1AI视频环境测试
```
操作:点击"测试AI视频环境"按钮
预期:
- Debug: 看到控制台窗口显示Python版本和库信息
- Release: 不看到控制台窗口,但功能正常,返回正确结果
```
### 用例2Python脚本执行
```
操作执行任何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. ✅ 文档完整易理解
---
通过这个全面的测试方案,我们可以确保控制台窗口修复方案的有效性和稳定性。