system()调用cocoa app

时间:2012-05-21 13:47:54

标签: objective-c c system

在我的cocoa应用程序中,我必须调用system()函数来启动外部应用程序。我使用的命令是:

system("./main &");

如果我从Xcode运行应用程序,它运行正常,因为我知道文件夹放在哪里。

如果我创建一个存档,并分发我的.app应用程序,system()找不到“main”。我必须把它放在哪里?或者,当我不在应用程序的文件夹中时,如何使用“./”运行应用程序?

编辑:也许我使用NSTask解决了,但是如何在后台运行“main”?现在它在一个新的终端窗口中打开。

NSTask *task = [[NSTask alloc] init]; 
[task setLaunchPath:@"/Applications/Multibo/main"]; 
[task setArguments:[NSArray arrayWithObjects:[NSString stringWithFormat:@"./main &"], nil]]; 
[task launch];

由于

2 个答案:

答案 0 :(得分:1)

尝试在可执行文件的名称前附加完整路径,并将其用作system的参数。请注意,system是实现定义的 - 不保证其行为在整个系统中是相同的,因此不建议使用它。您应该寻找合适的替代方案,例如NSWorkspace

答案 1 :(得分:1)

虽然dirkgently的答案是直接正确的,但真正的答案更复杂。

首先,NSTask不是通用命令行调用程序。这就是为什么添加&并不符合您的期望。实际上,通过NSTask调用的所有任务都是有效的背景。

但你真的不想使用NSTask。你应该真正使用XPC服务。现在,如果您的目标即使在您的程序退出后也会运行,那么您应该查看LaunchServices。