首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用“launchedTaskWithLaunchPath”Cocoa/objective启动应用程序

使用“launchedTaskWithLaunchPath”Cocoa/objective启动应用程序
EN

Stack Overflow用户
提问于 2010-07-25 16:43:31
回答 3查看 4.1K关注 0票数 3

我需要从应用程序中启动'TextMate‘,我使用了以下代码。

代码语言:javascript
运行
复制
[NSTask launchedTaskWithLaunchPath:@"/Applications/TextMate.app" arguments:[NSArray arrayWithObjects:@"hello.txt", nil]];

但是,我得到了以下错误返回。

代码语言:javascript
运行
复制
*** NSTask: Task create for path '/Applications/TextMate.app' failed: 22, "Invalid argument".  Terminating temporary process.
  • 我的密码怎么了?我只是试着运行"TextMate hello.txt“。

已添加

我可以让它按以下方式运行。

代码语言:javascript
运行
复制
[NSTask launchedTaskWithLaunchPath:@"/Applications/TextMate.app/Contents/MacOS/TextMate"     arguments:[NSArray arrayWithObjects:@"hello.txt", nil]];

我让另一个问题看看还有多少其他的方法可用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-25 17:04:42

在这种情况下,无效的参数是应用程序的名称。

如果您检查NSTask的文档,就会发现您使用的方法基本上是低级exec()系统调用的包装器。这意味着您需要提供实际可执行文件或二进制文件的名称,以便它能够创建流程。在您的例子中,您要给它一个目录(使用终端来确认/Applications中的大多数应用程序包都是目录)。这就是为什么它会倒钩。

您可以在TextMate的包目录中查找实际的可执行文件(应该位于/Applications/TextMate.app/Contents/MacOS中)。然后,您可以修改代码以调用实际的可执行文件。

但是,似乎正确的Cocoa方法是通过使用NSWorkspace,您可以查看它的openFile:withApplication: method,它似乎可以满足您的需要,在本例中,您确实指定了应用程序包目录作为参数,这是您最初所做的方式。

正式文档是这里

顺便说一句,我不能完全信任它;请参阅这个StackOverflow的答案来了解这个主题的更多信息。

票数 7
EN

Stack Overflow用户

发布于 2010-07-25 17:06:38

您正在尝试启动一个目录,而不是二进制文件。

票数 4
EN

Stack Overflow用户

发布于 2012-02-21 21:17:19

随着沙箱的开始,这不再有效,如果你试图启动自己的话,“禁止沙箱-恢复”就失败了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3330067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档