fix
This commit is contained in:
parent
954c0c457d
commit
ea5090c891
|
|
@ -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命令行窗口闪现的问题,同时保持了开发时的调试便利性和跨平台兼容性。
|
||||
|
|
@ -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. ✅ 文档完整易理解
|
||||
|
||||
---
|
||||
|
||||
通过这个全面的测试方案,我们可以确保控制台窗口修复方案的有效性和稳定性。
|
||||
Loading…
Reference in New Issue