Objective c 如何从Cocoa应用程序运行二进制文件?

Objective c 如何从Cocoa应用程序运行二进制文件?,objective-c,cocoa,Objective C,Cocoa,我正在为二进制文件制作一个简单的启动器,这样我就可以让它出现在我的启动板中 我最初的想法是运行系统(“./myProgram”)就足够了,但它似乎没有实际执行任何操作,因为它运行的终端实例在运行命令后没有保持打开状态,因此会立即关闭程序执行的任何其他任务 所以我的问题是,有没有办法让它无限期地开放 编辑:我希望我的启动程序在启动程序后立即关闭,因此依赖于需要它保持打开状态的东西并不理想 编辑:下面的所有操作都可以,但只有在从xcode运行时,当它独立运行时,它根本不会启动程序 system("o

我正在为二进制文件制作一个简单的启动器,这样我就可以让它出现在我的启动板中

我最初的想法是运行
系统(“./myProgram”)
就足够了,但它似乎没有实际执行任何操作,因为它运行的终端实例在运行命令后没有保持打开状态,因此会立即关闭程序执行的任何其他任务

所以我的问题是,有没有办法让它无限期地开放

编辑:我希望我的启动程序在启动程序后立即关闭,因此依赖于需要它保持打开状态的东西并不理想

编辑:下面的所有操作都可以,但只有在从xcode运行时,当它独立运行时,它根本不会启动程序

system("open /Applications/Utilities/Terminal.app myProgram");
system("open myProgram");
system("/bin/sh -c ./myProgram&");
system("./myProgram&");

NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/bash"];
[task setArguments: @[@"-c", @"./myProgram"]];
[task launch];
NSTask
不会给出任何错误,在应用程序运行时也不会引发任何异常

从字面上看,该计划的所有其他方面都起作用,但它不会启动,也不会说明原因

根据所有的“反馈”,这里是我到目前为止得到的。除非我提供一个绝对路径,否则它仍然不起作用(如果我以后想移动它,这是不好的)

可行的黑客解决方案(但一点也不优雅)

我不得不更换

FILE_PATH = [CURRENT_DIR stringByAppendingString: INIT_PATH];


要获取文件的正确路径,但它现在可以工作。

也许
NSWorkspace
和/或
NSTask
可以帮助您完成此任务?使用系统(“/bin/sh-c./myProgram&”)通过shell运行它;它是什么类型的二进制文件(控制台还是Cocoa应用)?@LeonardoBernardini首先检查我的编辑你不想使用
system()
,而是
NSTask
。其次,我认为问题在于路径
/myProgram
仅在应用程序的当前工作目录与
myProgram
目录相同时才起作用,而且肯定不会。您不需要/不想更改应用程序的cwd,因此需要构造一个到
myProgram
的完整路径。此外,如果您使用API出现故障,大多数(全部?)都会以错误代码/文本的形式向您提供原因。你需要开始收集它们,并将它们显示在日志中,以帮助你开发应用程序。
FILE_PATH = [CURRENT_DIR stringByAppendingString: INIT_PATH];
CURRENT_DIR = [[[[NSBundle mainBundle] bundlePath] stringByDeletingPathExtension] stringByDeletingLastPathComponent];