【问题标题】:Mono on MAC OS X El Capitan: LSOpenURLsWithRoleMAC OS X El Capitan 上的 Mono:LSOpenURLsWithRole
【发布时间】:2015-11-14 19:01:39
【问题描述】:

我有一个在 Linux 和 MAC 上的 Mono 上运行的 .NET 软件。该软件在 OSX Lion 下的 Mono 3.6.0 上使用 Macpack 打包为 .app,并使用 PackageMaker 创建了一个安装程序。它在所有新版本的 OSX 上运行良好,直到 El Capitan 触发以下错误:

LSOpenURLsWithRole() failed with error -10810 for the file .../Applications/MyApp.app

我已经在 El Capitan 上移动了开发文件,并设法使用 Mono 4.0.4.4 中的 Macpack 将其打包。使用时似乎没有显示该错误

open -a MyApp.app

现在唯一的问题是它不会在双击时启动。该软件由安装程序安装在 /Applications 中。它可以从控制台使用 open 命令启动,但不能双击。有没有办法通过模拟控制台的双击来查看错误或其他内容?

PS。同样在 El Capitan 上,唯一可行的 Mono 框架是最新的 4.0.4.4 或为 El Capitan 设计的 4.2.1。二进制文件的新位置在 /usr/local/bin 而不是 /usr/bin 中,并且仅当 /usr/local/bin 在安装之前存在时才有效,否则将无法识别单声道命令。

谢谢

【问题讨论】:

  • 回复:单声道版本;没错,El Capitan 支持 4.0.4.4 或 4.2.1 版本。从 /usr/bin 到 /usr/local/bin 的移动是 El Capitan 的要求,因为没有第三方应该修改 /usr/bin 中的任何内容。 /usr/local/bin 在全新安装之前不存在的问题是一个已知问题。
  • 至于您的启动问题,您查看过 Console.app 吗?双击时那里报告了任何错误?可能是权限问题,应用程序包中的启动器二进制文件是否具有正确的权限,应用程序包本身是否标记为可执行文件?

标签: c# macos mono


【解决方案1】:

这里有同样的问题(El Capitan)。我就是这样解决的(Mono 4.2.1)

1) 创建一个空脚本,替换掉macpack创建的脚本(例如:KeePass.app/Contents/MacOS/KeePass)

2) 为单声道和 exe 文件使用完整路径

#!/bin/sh
DIR=$(cd "$(dirname "$0")"; pwd) 
/usr/local/bin/mono $DIR/../Resources/KeePass.exe

我认为这与系统完整性保护 (csrutil) 有某种关系,但不确定。

【讨论】:

  • 这是一个临时修复,仅适用于 El Capitan:/usr/local/bin/mono "$ASSEMBLY" 如果您想在以前的版本上运行,您必须将单声道路径更改为 / usr/bin/mono ...
  • system-integrity-protection 不允许您运行“which”,因为它位于 /usr/bin 中。
  • 好吧,那我们可以用什么来代替which来定位单声道,因为根据OSX版本,它可以在两个不同的位置。
  • 如果 [ -f /usr/local/bin/mono ];那么
【解决方案2】:

LSOpenURLsWithRole() 失败,文件错误 -10810 .../Applications/MyApp.app

听起来可能是权限问题,但 -10810 可能意味着很多事情,而且我从未见过对那个错误号的响应,它与原始错误号一样(它从 PowerPC 时代就已经存在)。已指出权限、外部驱动器访问和实际的启动服务守护程序。

  • 重新启动(或手动终止并重新启动这些服务,包括 Finder/Spotlight)
  • ls -l /Application/YourApp.app 并检查是否标记为可执行文件
  • ls -l /Application/YourApp.app/Contents/MacOS/YourApp 并检查是否标记为可执行文件
  • 打开 Console.app 并重试双击您的应用并查看记录的警告/错误。
  • ...

搬到埃尔卡皮坦?然后你需要 Mono 版本 4.2.x 或 4.0.4.4。

来自 Mono 邮件列表:

Mac 最新的 Mono 4.0.4.4 包有什么区别 和 4.2.1 El Capitan 预览版? 4.0.4.4 的变更日志包括 “33585:El Capitan 系统完整性保护支持。”所以我想 4.0.4.4 也适用于 El Capitan?。

来自 Miguel de Icaza 的回复:

一个基于 Mono 4.0 系列,只需进行少量更改即可启用 对 El Capitan 的支持; 4.2 有相同的变化,除了 最新的 Mono 4.2,可用于 Alpha 版和候选发布版。

参考:http://sushihangover.github.io/osx-10-dot-11-el-capitan-which-mono-version/

【讨论】:

  • 嘿 RobertN,这是我在系统日志查询中得到的:10 月 17 日 00:34:16 Daniels-MBP com.apple.xpc.launchd[1] (MyApp.111072[1451]) :服务退出异常代码:127
  • Daniels-MBP:sca daniel$ cd /Applications/ Daniels-MBP:Applications daniel$ ls -l MyApp.app/ total 0 drwxrwxr-x 5 root admin 170 Oct 16 13:25 Contents Daniels- MBP:Applications daniel$ ls -l MyApp.app/Contents/MacOS/ 总计 8 -rwxrwxr-x 1 root admin 1411 Oct 16 13:11 MyApp
  • 错误 127 是找不到命令/文件;你的启动应用程序(在你的应用程序包中是一个脚本吗?),在 /usr/bin 或 ... 中找到 mono 是硬编码的吗?
  • 另外,由于是错误 127,请检查正在访问的某些文件是否在您的应用程序包中具有错误的权限...可能 ElCap 升级期间的系统文件被标记为错误,请尝试磁盘工具和错误的修复该卷上的磁盘权限。
  • macpack 的 gen'd 脚本可能是问题,mono 到 bin 目录的链接 (ln) 可能是问题。删除 bin 目录中的单声道符号链接,以便重新创建它以正确找到单声道。
【解决方案3】:

由于尚无修复,您可以使用此临时修复。使用 ma​​cpack 打包后,打开 app 文件夹并转到 /Contents/MacOS 并编辑启动脚本中的最后一个 if else:

MONO_PATH="/usr/bin/mono"

cd "$APP_PATH/Contents/Resources"

if [ "$X11_MODE" -eq "1" ]; then
        open-x11 "$APP_NAME"
else
        if [ -f "/usr/local/bin/mono" ]; then MONO_PATH="/usr/local/bin/mono" ; fi
        "$MONO_PATH" "$ASSEMBLY"
fi

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2016-01-11
    • 1970-01-01
    • 2016-12-15
    • 2017-01-25
    相关资源
    最近更新 更多