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的路径中有中文呢?这里是没有双引号的

所以程序里也没问题:

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

相关推荐
90后的晨仔几秒前
表单输入绑定详解:Vue 中的 v-model 实践指南
前端·vue.js
陈佬昔没带相机27 分钟前
围观前后端对接的 TypeScript 最佳实践,我们缺什么?
前端·后端·api
90后的晨仔36 分钟前
Vue 事件处理深入指南:从基础到进阶
前端·vue.js
qq_427506081 小时前
JavaScript和小程序写水印的方法示例
前端·算法·微信小程序
落雪小轩韩2 小时前
Vue常见题目
javascript·vue.js
拾光拾趣录2 小时前
前端面试真题深度解析:从原型到安全,七道题看透核心能力
前端·面试
烛阴2 小时前
告别重复劳动:Gulp.js 新手入门教程
前端·javascript
JSON_L3 小时前
Vue 正在热映模块
前端·javascript·vue.js
踏上青云路3 小时前
C# 闭包
java·前端·c#