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

macOS Sequoia下Quick Action调用.NET程序无法连接局域网MariaDB

macOS 15.2下Finder Quick Action无法连接局域网MariaDB的问题排查与解决建议

问题背景

  • 需求:通过Finder的Quick Action(基于Automator工作流,仅包含启动.NET控制台程序的Shell脚本),利用图片文件更新局域网内的MariaDB数据库。
  • 异常现象:旧版macOS中功能正常,升级到macOS 15.2(24C101)后,仅在Quick Action上下文下无法连接数据库,报错No route to host 192.168.XXX.YYY:3306;但终端直接运行程序、Automator内直接执行工作流均正常。
  • 排查动作:已简化程序为仅测试Socket连接,问题依旧;已使用苹果开发者证书签名程序,并配置了包含网络权限的plist文件。

已配置的权限plist文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.network.client</key>
    <true/>
    <key>com.apple.security.network.server</key>
    <true/>
    <key>com.apple.security.network.host</key>
    <string>192.168.XXX.YYY</string>
    
    <key>com.apple.security.automation.apple-events</key>
    <true/>
    
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
    <key>com.apple.security.get-task-allow</key>
    <true/>
</dict>
</plist>

测试Socket连接的代码

try
{
    var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    socket.Connect("192.168.XXX.YYY", 3306);
    // Log success
}
catch (Exception ex)
{
    // Log Error
}

环境信息

  • .NET版本:8.0
  • macOS版本:15.2(24C101)

解决建议

1. 检查Automator的系统权限

macOS 15对Automator工作流的权限隔离更严格,Quick Action运行时可能未获得完整网络权限:

  • 打开「系统设置」→「隐私与安全性」→「完全磁盘访问」,勾选Automator.app;
  • 进入「网络」权限列表,确保Automator被允许访问网络。

2. 修正Shell脚本的执行环境

Quick Action的Shell脚本默认使用受限的环境变量,可能导致.NET运行时或网络配置异常:

  • 在脚本开头指定.NET运行时的完整路径,例如:
    /usr/local/share/dotnet/dotnet /path/to/your/console/app.dll "$@"
    
  • 或显式配置PATH环境变量:
    export PATH="/usr/local/bin:/usr/bin:$PATH"
    /usr/local/share/dotnet/dotnet /path/to/your/console/app.dll "$@"
    

3. 精简权限配置并重新签名

移除不必要的权限项,避免权限冲突,再重新签名程序:

  • 保留必需权限:com.apple.security.network.client和com.apple.security.network.host,移除com.apple.security.network.server、com.apple.security.automation.apple-events等未用到的项;
  • 执行重新签名命令:
    codesign --force --deep --sign "你的开发者证书名称" --entitlements /path/to/your/entitlements.plist /path/to/your/console/app
    

4. 诊断网络路由差异

在Quick Action的Shell脚本中添加网络诊断命令,对比终端与Quick Action的网络环境:

  • 修改脚本,将网络诊断日志写入文件:
    ping -c 3 192.168.XXX.YYY >> ~/quick_action_network_log.txt
    traceroute 192.168.XXX.YYY >> ~/quick_action_network_log.txt
    /usr/local/share/dotnet/dotnet /path/to/your/app.dll "$@"
    
  • 查看~/quick_action_network_log.txt,确认Quick Action是否能正常ping通服务器,是否存在路由异常。

5. 将.NET程序打包为App Bundle

macOS对App Bundle的权限管理更规范,尝试打包为独立App:

  • 执行打包命令:
    dotnet publish -c Release -r osx-x64 --self-contained true -p:PublishSingleFile=true -p:UseAppHost=true -p:CreateBundle=true
    
  • 对生成的App Bundle进行签名和权限配置,再在Quick Action中调用该App。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:05:15