我需要从应用程序中启动'TextMate‘,我使用了以下代码。
[NSTask launchedTaskWithLaunchPath:@"/Applications/TextMate.app" arguments:[NSArray arrayWithObjects:@"hello.txt", nil]];
但是,我得到了以下错误返回。
*** NSTask: Task create for path '/Applications/TextMate.app' failed: 22, "Invalid argument". Terminating temporary process.
已添加
我可以让它按以下方式运行。
[NSTask launchedTaskWithLaunchPath:@"/Applications/TextMate.app/Contents/MacOS/TextMate" arguments:[NSArray arrayWithObjects:@"hello.txt", nil]];
我让另一个问题看看还有多少其他的方法可用。
发布于 2010-07-25 17:04:42
在这种情况下,无效的参数是应用程序的名称。
如果您检查NSTask的文档,就会发现您使用的方法基本上是低级exec()系统调用的包装器。这意味着您需要提供实际可执行文件或二进制文件的名称,以便它能够创建流程。在您的例子中,您要给它一个目录(使用终端来确认/Applications中的大多数应用程序包都是目录)。这就是为什么它会倒钩。
您可以在TextMate的包目录中查找实际的可执行文件(应该位于/Applications/TextMate.app/Contents/MacOS中)。然后,您可以修改代码以调用实际的可执行文件。
但是,似乎正确的Cocoa方法是通过使用NSWorkspace,您可以查看它的openFile:withApplication: method,它似乎可以满足您的需要,在本例中,您确实指定了应用程序包目录作为参数,这是您最初所做的方式。
正式文档是这里。
顺便说一句,我不能完全信任它;请参阅这个StackOverflow的答案来了解这个主题的更多信息。
发布于 2010-07-25 17:06:38
您正在尝试启动一个目录,而不是二进制文件。
发布于 2012-02-21 21:17:19
随着沙箱的开始,这不再有效,如果你试图启动自己的话,“禁止沙箱-恢复”就失败了。
https://stackoverflow.com/questions/3330067
复制相似问题