2012-03-14 50 views
3

我们有一个应用程序,我们已经构建为一个包,我们希望从另一个进程启动它。从另一个进程启动应用程序

我们应该怎么做? (),openFile()或execve() 但我不知道哪一个更适合我们。

感谢

+1

如果没有赏金,我会投票结束。你的问题非常模糊 - 我们应该如何知道哪一个更适合你?您没有提供任何关于您的要求的信息,以及为什么您在提到的3中有任何问题。 – 2012-04-06 06:19:24

回答

1

由于您在谈论的是应用程序,因此您不想通过文件关联机制。他们用于打开文件,图像等与适当的应用程序。既然你似乎不确定要问什么,我会说保持简单:

exec*家庭直接启动一个可执行文件。但请注意,取代了启动程序的启动程序。您的启动器将在该点停止执行。如果你想让启动器继续运行,你想使用启动子进程的东西。低级别的方法是fork/vfork,然后是exec,但使用system启动应用程序要简单得多,该应用程序负责处理幕后的所有操作。 (假设在注入执行路径的世界另一端用户没有安全问题)。

如果启动程序在启动应用程序后不立即终止,则需要考虑在启动的应用程序终止之前是否“阻止”,或者它是否异步启动应用程序 - 以便它们运行在平行下。启动器也可能会“等待”应用程序的返回值,以检查它是否成功,并可能在事后做些事情。有办法可以做到这一点,但由于我们不知道你需要什么,所以我不会详细讨论。

总之:如果您的启动程序的唯一工作是启动您的应用程序,请使用execl。如果您的启动器需要更多操作,请使用system。如果两者都无法满足您的需求,您需要提供更多信息 - 从您的启动器写入的语言开始。

PS。这两者都具有通用性和便携性的优点。他们为GUI和命令行应用程序工作,他们可以在任何类Unix系统上工作,在某种程度上可以在Windows上工作。没有必要把自己锁定在可可这个简单的东西上。

0

如果您使用可可,你可以使用NSWorkspace-launchApplication:

+1

但是哪种方式最适合我们?应该考虑什么? – kambi 2012-04-02 07:42:14

+0

你是什么意思?只需使用这种方法... – edc1591 2012-04-02 12:13:58

0

从OSX文档上NSWorkspaces

  • 中openFile:打开使用与其类型关联的默认应用程序指定的文件中指定。
  • openURL:打开指定URL处的位置。

使用URL你也可以打开FTP文件,或http例如。

相关问题