在 Linux 上,我们可以使用简单的 io.Process 调用来打开 url:
io.Process.run("xdg-open", [ url, ])
但尝试在 Windows 上做同样的事情
io.Process.run("start", [url]);
它失败并显示: 系统找不到指定的文件。
我猜我们需要 cmd.exe 的路径,它位于 %ComSpec%。尝试执行“echo %ComSpec%”,但出现相同的错误。也尝试过对路径进行硬编码,但没有成功。
这是我们完整的功能:
ProcessResult result;
try {
if(Platform.isLinux){
result = await io.Process.run("xdg-open", [ url, ]);
}
else if(Platform.isWindows){
result = await io.Process.run("start", [url]);
}
} on ProcessException catch (e){
Log.e(e?.message);
};
return result?.exitCode == 0;
Run Code Online (Sandbox Code Playgroud)
[编辑]更新标题以使其更准确
smo*_*gan 11
您的问题标题与您的代码不匹配;它不是试图运行cmd.exe,而是试图运行一个名为 的可执行文件start。它不起作用的原因是它不是可执行文件,而是内置于的解释器start中的命令。cmd.exe(尝试where start在命令提示符下运行;与 进行比较where cmd。)
如果你想运行cmd.exe类似的命令start,你需要传递runInShell: true给Process.run. 但是,请记住,如果这样做,您可能需要小心参数中的特殊字符。
(标题中问题的答案是:Process.run('cmd', [...]);。但是由于您想要做的是在 shell 中运行命令,因此使用起来runInShell: true比将命令作为字符串调用cmd更/c容易。)
| 归档时间: |
|
| 查看次数: |
6872 次 |
| 最近记录: |