近期,不少 Android Studio 用户在使用 Flutter/Dart 开发时遭遇了一个棘手的错误提示:“Dart LSP server: Cannot run program "dart" - CreateProcess error=193”。该错误导致 Dart 语言服务器无法启动,进而引发代码补全失效、语法高亮异常、静态分析中断等连锁问题,严重影响开发效率。本文将对该错误的成因、影响范围及解决方案进行详细报道。
错误现象与背景
该错误通常出现在 Android Studio 集成 LSP4IJ(Language Server Protocol for IntelliJ IDEA)插件后,尝试启动 Dart 语言服务器时。终端或日志中报出完整信息:“Cannot run program "dart" - CreateProcess error=193”。Error 193 在 Windows 系统下对应“不是有效的 Win32 应用程序”错误,即系统判定要执行的文件并非合法的可执行程序。这意味着 Android Studio 或 LSP4IJ 插件在调用 dart 命令时,找到了一个非预期的文件(可能是文件夹、脚本、或架构不匹配的二进制文件),而非真实的 Dart SDK 可执行文件。
核心原因分析
经过社区排查和官方反馈,该问题主要由以下几种情况引发:
第一,Dart SDK 路径配置错误。部分用户手动设置了 SDK 路径,但指向的目录缺少 bin/dart.exe 文件,或者 bin 下包含无效的符号链接。例如,使用解压工具直接解压 SDK 到磁盘时可能遗漏了关键文件。
第二,系统架构冲突。Error 193 在 64 位 Windows 上运行 32 位程序时也可能出现。如果用户安装的 Dart SDK 是 64 位版本,但 Android Studio(或 JVM)以 32 位模式运行,LSP4IJ 插件尝试调用 64 位 dart.exe 时,系统会拒绝执行,抛出 error 193。这种情况多见于通过 Chocolatey 或 scoop 等包管理器安装的 SDK 默认位宽与 IDE 不一致。
第三,环境变量干扰。PATH 环境变量中优先匹配到的 dart 命令并非来自 Dart SDK,而是来自其他软件(如 Git、Node.js 的某些工具链)生成的同名脚本或快捷方式。执行这些非原生可执行文件时同样会触发 193 错误。
第四,LSP4IJ 插件版本兼容性。部分早期版本的 LSP4IJ 插件在检测 SDK 时存在逻辑缺陷,会错误地将父目录(如 D:\flutter\bin\cache\dart-sdk)整体作为可执行文件传递给系统,导致创建进程失败。
社区反应与临时解决方案
该问题在 GitHub 的 dart-lang/sdk 和 JetBrains/intellij-plugins 仓库中均有大量反馈。用户“FlutterDev2024”在论坛中描述:“更新 Android Studio 2024.1 后突然出现该错误,所有 Dart 代码都变成白板,无法补全。重新安装 SDK 和插件均无效。” 类似遭遇者不在少数。
针对上述原因,社区与官方已总结出如下修复步骤:
-
验证 Dart SDK 安装完整性:在终端中直接运行
%DART_SDK_PATH%\bin\dart --version,若能正常输出版本号,则 SDK 本身无误。若报错 193,则需重新下载官方 SDK 压缩包并确保解压完整。 -
检查 Android Studio 的 JVM 位数:通过
Help -> About查看 Android Studio 是基于 32 位还是 64 位 JVM。若为 32 位,建议切换到 64 位版本(可通过修改studio64.exe启动或安装官方 64 位安装包解决)。同时,确保 Dart SDK 也为 64 位。 -
重置 SDK 路径:在
File -> Settings -> Languages & Frameworks -> Dart中,取消勾选“Enable Dart support”,应用后重新启用,并手动输入正确的 SDK 路径(例如C:\tools\dart-sdk)。若使用 Flutter SDK 内置的 Dart,应指向flutter\bin\cache\dart-sdk。 -
清理缓存与重启:删除 Android Studio 缓存目录(
%USERPROFILE%\.AndroidStudio*\system\caches)以及 LSP4IJ 插件的数据文件夹,然后重启 IDE。 -
更新或降级插件:暂时禁用 LSP4IJ 插件,切换回 Android Studio 内置的 Dart 语言支持(通过 Flutter 插件)。或者安装最新预览版 LSP4IJ 插件,该版本已修复部分路径解析问题。
官方回应与修复进展
截至发稿时,Dart 团队已确认该问题,并将其标记为高优先级。在最新发布的 Dart SDK 3.6 中,团队调整了 Windows 平台的启动器逻辑,以避免因路径误判导致的 error 193。同时,JetBrains 也承诺在下一次 LSP4IJ 更新中改进 SDK 检测机制,增加对架构不匹配的智能提示。
对于暂时无法更新的用户,最稳妥的方案是使用 Flutter 插件自带的 Dart 分析器(而非 LSP4IJ),或降级至 Android Studio Giraffe 等旧版本,后者未引入 LSP4IJ 依赖。
结语
CreateProcess error=193 虽看似复杂,但本质上是工具链路径与架构配置的常见问题。随着 Dart 和 Flutter 生态的快速迭代,类似的环境摩擦难以完全避免。建议开发者在遇到此类问题时首先检查 SDK 路径的准确性,并留意 IDE 与 SDK 的位数匹配。官方团队已着手解决,未来版本的自动化检测将大幅降低此类错误的发生概率。在此期间,希望上述排查步骤能为受影响的用户提供有效帮助。