在 Linux 上,我们可以使用简单的 io.Process 调用打开 url:
io.Process.run("xdg-open", [ url, ])
但尝试在 Windows 上做同样的事情
io.Process.run("开始", [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;
[编辑] 更新标题更准确
最佳答案
您的问题标题与您的代码不符;它不是在尝试运行 cmd.exe
,而是在尝试运行名为 start
的可执行文件。它不起作用的原因是 start
不是可执行文件,它是 cmd.exe
解释器中内置的命令。 (尝试在命令提示符下运行 where start
;与 where cmd
进行比较。)
如果你想运行cmd.exe
命令,比如start
,你需要将runInShell: true
传递给Process。运行
。但是,请记住,如果这样做,您可能需要注意参数中的特殊字符。
(您标题中问题的答案是:Process.run('cmd', [...]);
。但是由于您想要做的是在shell 使用 runInShell: true
比使用 /c
调用 cmd
和你的命令作为字符串更容易。)
关于flutter - dart:io 进程 - 如何在 Windows 上运行 'CMD start'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60821479/