从另一个进程启动应用程序
问题描述:
答
由于您在谈论的是应用程序,因此您不想通过文件关联机制。他们用于打开文件,图像等与适当的应用程序。既然你似乎不确定要问什么,我会说保持简单:
exec*
家庭直接启动一个可执行文件。但请注意,取代了启动程序的启动程序。您的启动器将在该点停止执行。如果你想让启动器继续运行,你想使用启动子进程的东西。低级别的方法是fork/vfork
,然后是exec
,但使用system
启动应用程序要简单得多,该应用程序负责处理幕后的所有操作。 (假设在注入执行路径的世界另一端用户没有安全问题)。
如果启动程序在启动应用程序后不立即终止,则需要考虑在启动的应用程序终止之前是否“阻止”,或者它是否异步启动应用程序 - 以便它们运行在平行下。启动器也可能会“等待”应用程序的返回值,以检查它是否成功,并可能在事后做些事情。有办法可以做到这一点,但由于我们不知道你需要什么,所以我不会详细讨论。
总之:如果您的启动程序的唯一工作是启动您的应用程序,请使用execl
。如果您的启动器需要更多操作,请使用system
。如果两者都无法满足您的需求,您需要提供更多信息 - 从您的启动器写入的语言开始。
PS。这两者都具有通用性和便携性的优点。他们为GUI和命令行应用程序工作,他们可以在任何类Unix系统上工作,在某种程度上可以在Windows上工作。没有必要把自己锁定在可可这个简单的东西上。
答
从OSX文档上NSWorkspaces:
- 中openFile:打开使用与其类型关联的默认应用程序指定的文件中指定。
- openURL:打开指定URL处的位置。
使用URL你也可以打开FTP文件,或http例如。
如果没有赏金,我会投票结束。你的问题非常模糊 - 我们应该如何知道哪一个更适合你?您没有提供任何关于您的要求的信息,以及为什么您在提到的3中有任何问题。 – 2012-04-06 06:19:24