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

树莓派4 Linux开机自启dotnet dll报访问拒绝错误如何解决?

故障根因与解决方法

你不需要在Linux环境重新编译源码,.NET生成的跨平台IL指令集兼容不同操作系统,你在终端直接执行命令可正常运行就已经证明dll本身没有兼容性问题。

从你提供的错误堆栈可以直接定位故障点:程序代码GreetingService.cs第220行调用了Console.ReadLine()方法。rc.local、systemd等开机自启场景下,后台进程未关联交互式终端,标准输入流默认处于关闭状态,此时读取控制台输入的操作就会触发Bad file descriptor异常,最终导致进程崩溃退出。

解决方案

方案1:修改代码(永久生效,推荐)

  • 删除后台服务不需要的Console.ReadLine()调试逻辑即可,服务本身是循环上报数据的常驻进程,不需要等待控制台输入来维持运行
  • 如果需要保留本地调试时的控制台等待逻辑,可以增加输入重定向判断,只在交互式终端运行时触发等待:
// 仅当标准输入未被重定向(交互式运行场景)时等待控制台输入
if (!Console.IsInputRedirected)
{
    Console.ReadLine();
}
  • 重新编译后替换树莓派上的dll文件即可。

方案2:修改启动配置(无需改代码,临时适配)

如果暂时无法修改源码,可以在启动时给进程重定向标准输入流,避免读取报错:

  • rc.local启动命令修改为:
    dotnet /home/pi/E6101/AV308XC/AV308XC.dll < /dev/null &
  • systemd服务配置的[Service]段添加如下配置:
StandardInput=null

额外注意:确保运行该.NET进程的用户拥有串口设备/dev/ttyUSB0的访问权限,可执行sudo usermod -aG dialout 运行用户名将用户加入串口权限组,避免后续出现串口访问拒绝问题。

内容的提问来源于stack exchange,提问作者서상원

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:36:05