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

Mac上通过.NET Core启动进程报错“文件或目录不存在”求助

解决Mac上C#启动gradlew进程报“no such file or directory”的问题

这个坑我之前踩过!明明文件就在那儿,终端能跑,C#里就是找不到,核心原因是Mac上的shell脚本执行逻辑和.NET Process的调用方式不匹配,咱们来一步步解决:

问题根源

gradlew本质是一个Shell脚本(不是原生二进制可执行文件),终端里能正常运行是因为Shell会自动读取脚本开头的#!/bin/bash(shebang),调用对应的解释器来执行它。但你当前的代码里设置了UseShellExecute = false,这时候.NET会直接尝试把gradlew当成可执行二进制文件来启动,系统找不到对应的执行程序,就会抛出“no such file or directory”(这个错误提示确实有点误导,不是文件不存在,是不知道怎么执行它)。

可行解决方案

方案1:通过Bash解释器执行(支持输出重定向)

如果需要保留RedirectStandardOutput和RedirectStandardError的功能(也就是必须UseShellExecute = false),可以直接调用/bin/bash来运行gradlew:

var gradlewFullPath = Path.Combine(gradlewDir, "gradlew");
var processInfo = new ProcessStartInfo("/bin/bash")
{
    WorkingDirectory = gradlewDir,
    CreateNoWindow = true,
    UseShellExecute = false,
    RedirectStandardError = true,
    RedirectStandardOutput = true,
    // 用-c参数告诉bash要执行的命令
    Arguments = $"-c '{gradlewFullPath} bundleRelease'"
};
var process = Process.Start(processInfo);

方案2:启用Shell执行(不需要输出重定向时用)

如果不需要捕获输出,可以把UseShellExecute设为true,让系统通过Shell来处理脚本的执行逻辑,这时候直接用绝对路径的gradlew就行:

var gradlewFullPath = Path.Combine(gradlewDir, "gradlew");
var processInfo = new ProcessStartInfo(gradlewFullPath, "bundleRelease")
{
    WorkingDirectory = gradlewDir,
    CreateNoWindow = true,
    UseShellExecute = true
};
var process = Process.Start(processInfo);

额外检查点

  • 确认gradlew的执行权限:你说已经设置了,但可以再用chmod +x gradlew确认一遍
  • 检查脚本开头的shebang:确保gradlew第一行是#!/bin/bash或者#!/usr/bin/env bash,避免解释器路径错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:52:52