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

Linux下如何让新启动的子进程识别.NET的路径?

解决方案

1. 直接通过dotnet命令启动.NET应用(推荐)

你的SAT.FCCHandling是.NET应用,若为框架依赖发布,必须通过dotnet命令启动,而非直接执行二进制文件。修改Linux分支代码,绕开bash的环境变量问题:

#if (WINDOWS)
string strCmdText = $"/C \"SAT.FCCHandling -l{password} -i{ip} -xDeleteFCC\"";
#endif
#if (LINUX)
// 直接指定dotnet命令,传入应用程序集路径和参数
var appPath = Path.Combine(AppContext.BaseDirectory, "SAT.FCCHandling.dll");
string strCmdText = $"{appPath} -l{password} -i{ip} -xDeleteFCC";
#endif

using (var proc = Process.Start(new ProcessStartInfo
{
#if (WINDOWS)
    FileName = "cmd.exe",
    Arguments = strCmdText,
#endif
#if (LINUX)
    FileName = "dotnet", // 直接调用dotnet运行时
    Arguments = strCmdText,
#endif
    UseShellExecute = false,
    RedirectStandardOutput = true,
    CreateNoWindow = true,
    WindowStyle = ProcessWindowStyle.Hidden
}))
{
    proc.WaitForExit();
    if (proc.ExitCode != 0)
    { Assert.Fail("There was an issue Inserting an invalid FCC."); }
}

2. 修正bash调用逻辑(若必须通过bash启动)

若坚持用bash,需解决两个核心问题:路径格式错误、环境变量缺失:

  • Linux路径用./SAT.FCCHandling而非.//SAT.FCCHandling
  • 显式传递.NET环境变量(DOTNET_ROOT和PATH)

修改Linux分支代码:

#if (LINUX)
// 替换为你的dotnet实际安装路径,默认通常是/usr/share/dotnet
string dotnetRoot = "/usr/share/dotnet";
// 修正路径格式,并显式设置环境变量后执行应用
string strCmdText = $"-c \"export DOTNET_ROOT={dotnetRoot}; export PATH=$PATH:{dotnetRoot}; ./SAT.FCCHandling -l{password} -i{ip} -xDeleteFCC\"";
#endif

3. 确保子进程工作目录正确

设置ProcessStartInfo.WorkingDirectory为SAT.FCCHandling所在的二进制目录,避免路径解析错误:

using (var proc = Process.Start(new ProcessStartInfo
{
    // ...其他配置项
    // 设置为当前测试程序的输出目录,或直接指定目标应用的目录
    WorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
}))

额外检查项

  • 若SAT.FCCHandling是自包含发布的,需确保二进制文件有执行权限:在终端执行chmod +x SAT.FCCHandling
  • 验证VSCode调试环境的PATH变量:在调试控制台执行echo $PATH,确认包含dotnet的安装路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:35:48