如何在Windows端Flutter项目中嵌入外部exe文件并获取其路径调用
方案1:沿用当前assets配置的解决方法
你当前的资源配置是可行的,可通过以下步骤直接获取exe的绝对路径:
- 先添加依赖到
pubspec.yaml:
dependencies: flutter: sdk: flutter path: ^1.8.3
- 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配置:
- 将所有exe和依赖文件放到项目
windows/runner/custom_exe/目录下(custom_exe可自定义名称) - 修改项目根目录下
windows/CMakeLists.txt,在末尾添加以下配置,让构建时自动拷贝所有相关文件到输出目录:
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/runner/custom_exe/" DESTINATION "${CMAKE_INSTALL_PREFIX}" FILES_MATCHING PATTERN "*.exe" PATTERN "*.dll" PATTERN "*.config")
- 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
相关产品推荐
相关产品推荐

