我有一个在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上的开发文件,并设法用 Maco 打包 Mono 4.0.4.4 。使用
时似乎没有显示错误open -a MyApp.app
现在唯一的问题是它不会在双击时启动。该软件由安装程序安装在/ Applications中。它通过打开命令从控制台开始,但不是双击。有没有办法通过模拟从控制台双击来查看错误或其他内容?
PS。同样在El Capitan上,唯一可行的Mono框架是最新的4.0.4.4或为El Capitan设计的4.2.1。二进制文件的新位置在/ usr / local / bin而不是/ usr / bin中,只有在安装之前存在/ usr / local / bin时才有效,否则将无法识别mono命令。
由于
答案 0 :(得分:2)
这里也有同样的问题(El Capitan)。多数民众赞成我如何解决(Mono 4.2.1)
1)创建一个空脚本并替换macpack创建的脚本(例如:KeePass.app/Contents/MacOS/KeePass)
2)使用mono和exe文件的完整路径
#!/bin/sh
DIR=$(cd "$(dirname "$0")"; pwd)
/usr/local/bin/mono $DIR/../Resources/KeePass.exe
我认为这在某种程度上与系统完整性保护(csrutil)有关但不确定。
答案 1 :(得分:1)
LSOpenURLsWithRole()失败,文件错误为-10810 ... /应用/ MyApp.app
听起来它可能是权限问题,但-10810可能意味着很多事情,而且我从来没有看到对该错误号的回应,这个错误号对于它的原始错误(它自PowerPC时代以来一直存在)。已经指出了权限,外部驱动器访问和实际的Launch Services守护程序。
搬到El Capitan?然后你需要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的回复:
One基于Mono 4.0系列,只需进行最少的更改即可启用 对El Capitan的支持; 4.2之上有相同的变化 最新的Mono 4.2,可在Alpha和候选版本上获得。
参考:http://sushihangover.github.io/osx-10-dot-11-el-capitan-which-mono-version/
答案 2 :(得分:1)
由于尚未修复,您可以使用此临时修复程序。打包 macpack 后打开app文件夹,然后转到/ Contents / MacOS并编辑启动脚本中的最后一个if:
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