我们有一个应用程序,我们已经构建为一个bundle,我们希望从另一个进程启动它。
我们应该怎么做? 根据我的理解,我们可以使用openUrls(),openFile()或execve() 但我不知道哪一个更适合我们。
由于
答案 0 :(得分:1)
由于您正在讨论应用程序,因此您不希望通过文件关联机制。它们用于通过适当的应用程序打开文档,图像等。既然你似乎不确定要问什么,我会说保持简单:
exec*
系列直接启动可执行文件。但请注意,用启动的应用程序替换启动过程。您的启动器将在此时停止执行。如果希望启动程序继续运行,则需要使用启动子进程的内容。低级方式为fork/vfork
,后跟exec
,但使用system
启动应用程序要简单得多,后者会处理幕后的所有操作。 (假设世界另一端的用户注入执行路径没有安全问题)。
如果启动器在启动应用程序后没有立即终止,您将需要考虑它是否会“阻止”,直到启动的应用程序终止,或者它是否异步启动应用程序 - 以便它们随后运行平行。启动器也可以“等待”应用程序的返回值,以检查它是否成功,然后可能会做一些事情。有办法做到这一切,但由于我们不知道你需要什么,我不会详细说明。
简而言之:如果您的启动器的唯一工作是启动您的应用,请使用execl
。如果您的启动器需要执行更多操作,请使用system
。如果两者都不能满足您的需求,您需要提供更多信息 - 从您的启动器编写的语言开始。
PS。这两者都具有通用性和便携性的优点。它们适用于GUI和命令行应用程序,它们可以在任何类Unix系统上运行,在某种程度上也适用于Windows。没有必要将自己锁定在Cocoa中以获得如此简单的东西。
答案 1 :(得分:0)
如果您使用的是Cocoa,则可以使用NSWorkspace
的{{1}}。
答案 2 :(得分:0)
来自NSWorkspaces的OSX文档:
使用url,您也可以在ftp上打开文件,例如http。