dart:io Process - 如何在 Windows 上运行“CMD start”?

sha*_*ais 5 dart flutter

在 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容易。)