xiyuesaves / LiteLoaderQQNT-lite_tools

LiteLoaderQQNT 插件 - 轻量工具箱 —— 轻量 · 优雅 · 高效
GNU General Public License v3.0
1.12k stars 36 forks source link

[Bug]: Mac系统无法执行外部程序 #291

Open jiongjiongJOJO opened 4 months ago

jiongjiongJOJO commented 4 months ago

请确保您已阅读以上注意事项,并勾选下方的确认框。

QQNT 版本

6.9.38-24815

LiteLoaderQQNT 版本

2.30.10(仓库最新代码也不行1411c48)

轻量工具箱 版本

1.1.2

运行环境

MacOS

已安装插件列表(如果你不确定问题出在哪里建议填写)

只有一个lite-tools

重现步骤

使用tg下载贴纸(无论是视频格式调用ffmpeg还是动画格式调用tgs转换工具都会出现)

期望的结果是什么?

spawn正常处理外部程序

实际的结果是什么?

视频(ffmpeg):

下载贴纸包失败 spawn EPERM Error: spawn EPERM
    at ChildProcess.spawn (node:internal/child_process:414:11)
    at spawn (node:child_process:784:9)
    at /Users/jojo/Library/Containers/com.tencent.qq/Data/Documents/LiteLoader/plugins/lite_tools/dist/main.js:22087:28
    at proto._getFfmpegPath (/Users/jojo/Library/Containers/com.tencent.qq/Data/Documents/LiteLoader/plugins/lite_tools/dist/main.js:22477:18)
    at proto._spawnFfmpeg (/Users/jojo/Library/Containers/com.tencent.qq/Data/Documents/LiteLoader/plugins/lite_tools/dist/main.js:22073:14)
    at proto.availableCodecs.proto.getAvailableCodecs (/Users/jojo/Library/Containers/com.tencent.qq/Data/Documents/LiteLoader/plugins/lite_tools/dist/main.js:22648:14)
    at FfmpegCommand.availableCodecs.FfmpegCommand.getAvailableCodecs (/Users/jojo/Library/Containers/com.tencent.qq/Data/Documents/LiteLoader/plugins/lite_tools/dist/main.js:23432:27)
    at supportEncoding (/Users/jojo/Library/Containers/com.tencent.qq/Data/Documents/LiteLoader/plugins/lite_tools/dist/main.js:26825:42)
    at new Promise (<anonymous>)
    at getTgSticker (/Users/jojo/Library/Containers/com.tencent.qq/Data/Documents/LiteLoader/plugins/lite_tools/dist/main.js:26824:41)

贴纸(tgs):

下载出错 Error: spawn EPERM

贴纸没有输出完整的堆栈错误信息,刚刚调试的时候看了错误跟上面的类似,都是在ChildProcess.spawn时报的错误,替换到Relese版本了,就没有记录相关的错误信息

补充说明(可选)

这里有个测试的脚本,能够正确输出结果,说明mac是支持execFile指令的。

const { execFile } = require('child_process');

execFile('ls', (error, stdout, stderr) => {
  if (error) {
    console.error("ls 执行出错:", stderr);
  }
  console.log("ls 执行完成:", stdout);
});

截屏2024-07-07 19 00 31

jiongjiongJOJO commented 4 months ago

这个错误跟权限有关系,有没有mac大佬看一下是不是要配置什么权限 截屏2024-07-07 19 04 32 截屏2024-07-07 19 05 16

参考了这篇文章说的解决方案,还是没解决这个问题:https://www.jianshu.com/p/fee56ccc24a5

jiongjiongJOJO commented 4 months ago

@xiyuesaves 要不针对Mac换成Post请求的方式,需要用户手动开启mac端的转换程序,然后再进行下载tg贴纸😤😫

xiyuesaves commented 4 months ago

或许可以尝试使用 wasm 模块来解决这个问题?

LanYunDev commented 3 weeks ago

官方签名的QQ应用,开启了应用沙盒,导致在容器内无法访问外部文件

LanYunDev commented 3 weeks ago

你可以尝试将代码文件移动到应用容器中运行. open /Users/$(whoami)/Library/Containers/com.tencent.qq/Data/Documents/ 这个命令在终端运行,打开的文件夹就是QQ的容器,另外解决办法是自签名(可能会有些奇怪的问题,我是这样做的,但有点麻烦,建议自行解决)

LanYunDev commented 3 weeks ago

参考了这篇文章说的解决方案,还是没解决这个问题:https://www.jianshu.com/p/fee56ccc24a5

回复:

看了下这文章内容,等效意思就是 sudo /usr/bin/xattr -rd com.apple.quarantine /Applications/QQ.app或者sudo xattr -cr /Applications/QQ.app 但是别这样做,因为QQ用的electron,丢代码签名信息,不使用沙盒,会导致GPU/NET等调用问题,从而导致无法启动. (个人拙见,欢迎指正.)