tauri2项目中自定义执行cmd命令界面卡死以及中文出错问题

为了满足客户的需求,需要在前端中可以执行任意的cmd命令,然后在rust端执行,之前已经写过这个逻辑,但是今天发现出现了两个问题:1.cmd执行时间长的话,程序就会卡死,2.执行命令中包含中文的话,就会执行失败,今天就来讲一个该怎么解决这个两个问题

1.时间长程序卡死

要解决这个问题,就需要让cmd命令进行异步操作,改善后的程序如下,传递一个cmd命令字符串就可以了

rust 复制代码
#[tauri::command]
pub async fn run_command(command: String) -> Result<String, String> {
    let output = if cfg!(target_os = "windows") {
        tokio::process::Command::new("cmd")
            .args(&["/C", &command])
            .output()
            .await
            .map_err(|e| e.to_string())?
    } else {
        tokio::process::Command::new("sh")
            .arg("-c")
            .arg(&command)
            .output()
            .await
            .map_err(|e| e.to_string())?
    };

    if output.status.success() {
        Ok(String::from_utf8_lossy(&output.stdout).to_string())
    } else {
        Err(String::from_utf8_lossy(&output.stderr).to_string())
    }
}

2.中文报错问题

解决中文报错问题,可以使用双引号将中文包括起来,因为手动在cmd中操作,你会发现中文也是被双引号包括的,所以就模拟这个操作即可

如果是exe的路径中有中文呢?这里是没有双引号的

所以程序里也没问题:

可以执行成功,并会得到结果

相关推荐
Justin3go4 分钟前
丢掉沉重的记忆:Codex、Claude Code 与 OpenCode 的上下文压缩术
前端·后端·架构
JokerLee...7 分钟前
大屏自适应方案
前端·vue.js·大屏端
dyb-dev25 分钟前
我是如何学习 NestJS 的
前端·nestjs·全栈
kyriewen40 分钟前
重排、重绘、合成:浏览器渲染的“三兄弟”,你惹不起也躲不过
前端·javascript·浏览器
NickJiangDev1 小时前
Elpis-Core 技术解析:从零构建一个基于 Koa 的企业级 Node.js 框架内核
前端
我要让全世界知道我很低调1 小时前
来聊聊 Codex 高效编程的正确姿势
前端·程序员
NickJiangDev1 小时前
Elpis Webpack 工程化实战:Vue 多页应用的构建体系搭建
前端
米饭同学i1 小时前
GitLab CI/CD + Vue 前端 完整方案
前端
yuki_uix1 小时前
遇到前端题目,我现在会先问自己这四个问题
前端·面试
Wect1 小时前
JS 手撕:对象创建、继承全解析
前端·javascript·面试