2015-10-17 100 views
3

我有一个运行在Mono上的Linux和MAC上的.NET软件。该软件打包为.app与Macpack在Mono 3.6.0 OSX Lion下创建,并使用PackageMaker创建了一个安装程序。它好工作在OSX所有新版本,直到埃尔卡皮坦触发以下错误:MAC OS X上的单声道Capitan:LSOpenURLsWithRole

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

我搬到上埃尔卡皮坦发展的文件,并设法从单声道4.0 Macpack收拾它。 4.4。它似乎没有表明使用时出现错误

open -a MyApp.app 

现在唯一的问题是它不会在双击时启动。该软件安装在安装程序的/应用程序中。它从控制台开始很好,打开命令,但不是双击。有没有办法通过模拟从控制台的双击来看到错误或其他?

PS。另外在El Capitan,似乎能够工作的唯一Mono框架是最新的4.0.4.4或为El Capitan 4.2.1设计的框架。二进制文件的新位置在/ usr/local/bin而不是/ usr/bin中,只有在安装前存在/ usr/local/bin时才有效,否则mono命令将无法识别。

感谢

+0

回复:与macpack包装打开app文件夹,然后转到/内容/ MacOS和编辑最后,如果别人从你的启动脚本后,单声道的版本;这是正确的,无论是4.0.4.4还是4.2.1都是El Capitan支持的版本。从/ usr/bin移动到/ usr/local/bin是El Capitan的要求,因为没有第三方应该修改/ usr/bin中的任何内容。在全新安装之前/ usr/local/bin不存在的问题是已知问题。 – SushiHangover

+0

至于你的启动问题,你看看Console.app?在双击过程中报告的任何错误?可能是烫发问题,应用程序包中的启动程序二进制文件是否具有正确的权限,并且应用程序包本身是否标记为可执行文件? – SushiHangover

回答

1

由于没有修复,您可以使用此临时修复。

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 
1

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

听起来像它可能是权限问题,但-10810可能意味着很多东西,我从来没有看到这是明确的,以原来的错误号的响应(它有自PowerPC日以来一直)。权限,外部驱动器访问权限和实际的启动服务守护进程已被指向。

  • 重新启动(或手动杀死和重生这些服务,包括搜索/聚光灯)
  • LS -l /Application/YourApp.app并检查被标记为可执行的
  • LS -l /应用/ YourApp .app/Contents/MacOS/YourApp并检查被标记为可执行文件
  • 打开Console.app并重试双击您的应用程序并查看记录的警告/错误。
  • ...

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

从单邮件列表:Miguel de Icaza的

What is the difference between the latest Mono 4.0.4.4 package for Mac and the 4.2.1 El Capitan Preview? The changelog of 4.0.4.4 includes “33585: El Capitan System Integrity Protection support.” so i suppose that the 4.0.4.4 also works on El Capitan?.

回复:

One is based on Mono 4.0 series, with minimal changes just to enable the support on El Capitan; The 4.2 has the same changes, on top of the latest Mono 4.2, available on Alpha and the release candidate.

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

+0

嘿RobertN,这是我在系统日志查询中得到的内容:Oct 17 00:34:16 Daniels-MBP com.apple.xpc.launchd [1](MyApp.111072 [1451]):退出异常代码的服务: 127 –

+0

丹尼尔斯-MBP:SCA丹尼尔$ CD /应用/ 丹尼尔斯-MBP:应用丹尼尔$ LS -l MyApp.app/ 总0 drwxrwxr-×5根管理170 10月16日13时25分内容 丹尼尔斯-MBP:应用程序daniel $ ls -l MyApp.app/Contents/MacOS/ total 8 -rwxrwxr-x 1 root admin 1411 Oct 16 13:11 MyApp –

+0

错误127是命令/文件未找到;是您的启动应用程序(在您的应用程序中是否包含脚本?),在/ usr/bin或...中找到单声道硬编码还是...? – SushiHangover

2

同样在这里的问题(埃尔卡皮坦)。多数民众赞成我是如何解决(单声道4.2.1)

1)创建一个空的脚本,并替换由macpack创建(如:KeePass。应用/内容/ MacOS /作用的KeePass)

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

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

我认为是主题相关的系统完整性保护(csrutil),但不能肯定。

+0

这是一个只能在El Capitan上运行的临时修复程序:/ usr/local/bin/mono“$ ASSEMBLY”如果您想在之前的版本中运行,您必须将单声道路径更改为/ usr/bin/mono .. 。 –

+1

系统完整性保护不允许您运行“which”,因为它位于/ usr/bin中。 – rcruzs00

+0

好的,那么我们可以用什么来代替'which'来定位单声道,因为它可以位于基于OSX版本的两个不同位置。 –