1

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

system("./main &");

如果我从 Xcode 运行应用程序,它可以正常工作,因为我知道将 main.js 放在哪里的文件夹。

如果我创建档案并分发我的 .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];

谢谢

4

2 回答 2

1

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

于 2012-05-21T13:54:25.437 回答
1

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

首先,NSTask它不是一个通用的命令行调用程序。这就是为什么添加&不符合您的预期。实际上,通过调用的所有任务实际上NSTask都是后台。

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

于 2012-05-21T17:54:33.643 回答