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];