在我的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];
由于
答案 0 :(得分:1)
尝试在可执行文件的名称前附加完整路径,并将其用作system
的参数。请注意,system
是实现定义的 - 不保证其行为在整个系统中是相同的,因此不建议使用它。您应该寻找合适的替代方案,例如NSWorkspace
。
答案 1 :(得分:1)
虽然dirkgently的答案是直接正确的,但真正的答案更复杂。
首先,NSTask
不是通用命令行调用程序。这就是为什么添加&
并不符合您的期望。实际上,通过NSTask
调用的所有任务都是有效的背景。
但你真的不想使用NSTask。你应该真正使用XPC服务。现在,如果您的目标即使在您的程序退出后也会运行,那么您应该查看LaunchServices。