【问题标题】:system() call in cocoa app可可应用程序中的 system() 调用
【发布时间】:2012-05-21 13:47:53
【问题描述】:

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

system("./main &");

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

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

谢谢

【问题讨论】:

  • 请注意,您不能在运行时对工作目录做出任何假设,因此您需要完整路径。

标签: objective-c c system


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    首先,NSTask 不是通用命令行调用程序。这就是为什么添加 & 并没有达到您的预期。事实上,通过NSTask 调用的所有任务实际上都是后台任务。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多