You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows端Flutter项目中嵌入外部exe文件并获取其路径调用

方案1:沿用当前assets配置的解决方法

你当前的资源配置是可行的,可通过以下步骤直接获取exe的绝对路径:

  1. 先添加依赖到pubspec.yaml:
dependencies:
  flutter:
    sdk: flutter
  path: ^1.8.3
  1. Dart侧获取路径代码如下:
import 'dart:io';
import 'package:path/path.dart' as path;
import 'dart:io';

Future<void> runEmbeddedExe() async {
  // 获取当前Flutter应用自身exe的绝对路径
  final String appExePath = Platform.resolvedExecutable;
  // 获取应用exe所在的根目录
  final String appRootDir = path.dirname(appExePath);
  // 拼接assets下exe文件的完整路径,debug/release模式通用
  final String targetExePath = path.join(
    appRootDir,
    'data',
    'flutter_assets',
    'assets',
    'exe',
    '你要调用的目标程序.exe'
  );

  // 校验文件存在后启动
  if (await File(targetExePath).exists()) {
    await Process.start(targetExePath, []);
  }
}
方案2:更推荐的嵌入方案

如果你的exe附带dll、配置文件等依赖,更建议用Windows原生构建逻辑处理嵌入,不需要走Flutter assets配置:

  1. 将所有exe和依赖文件放到项目windows/runner/custom_exe/目录下(custom_exe可自定义名称)
  2. 修改项目根目录下windows/CMakeLists.txt,在末尾添加以下配置,让构建时自动拷贝所有相关文件到输出目录:
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/runner/custom_exe/"
        DESTINATION "${CMAKE_INSTALL_PREFIX}"
        FILES_MATCHING PATTERN "*.exe" PATTERN "*.dll" PATTERN "*.config")
  1. Dart侧获取路径更简单:
final String appRootDir = path.dirname(Platform.resolvedExecutable);
final String targetExePath = path.join(appRootDir, '你要调用的目标程序.exe');
// 后续启动逻辑和方案1一致

该方案优势:

  • 不需要配置Flutter assets规则,文件结构更清晰
  • 依赖文件和exe存放在同一目录,不需要额外处理路径适配
  • 不会和其他Flutter资源文件混淆,后续更新替换exe更方便
注意事项
  • 若启动exe需要管理员权限,可在Process.start时添加参数runAsAdministrator: true
  • 若exe需要读写同目录配置文件,可通过workingDirectory参数指定exe的工作目录为appRootDir

内容的提问来源于stack exchange,提问作者matteoh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:36:03