2012-03-14 6 views
3

私たちはバンドルとして構築したアプリケーションを持っており、別のプロセスから起動したいと思っています。別のプロセスからアプリケーションを起動する

どうすればよいですか? 私はopenUrls()、openFile()またはexecve()を使用することができますが、 を使用していますが、どちらが良いかわかりません。

おかげ

+1

奨励金がなかったら、私はこれを閉じると投票します。あなたの質問は非常に曖昧です - あなたはどのスイートがあなたをより良くするかをどのように知っていますか?あなたはあなたの要件についての*どんな*情報も提供していないし、あなたが言及した3つの問題になぜ問題があるのか​​。 –

答えて

1

アプリケーションについて話しているので、ファイルの関連付けの仕組みを調べる必要はありません。彼らは適切なアプリケーションで文書や画像などを開くためのものです。あなたは何を聞くべきか分からないので、私は単純なままにしておきたいと思います。

exec*ファミリーは実行ファイルを直接起動します。しかし、は、起動したアプリケーションでの起動プロセスを置き換えることに注意してください。ランチャーはその時点で実行を停止します。ランチャーを実行し続けるには、サブプロセスを起動するものを使用します。低レベルの方法はfork/vforkに続いてexecですが、背中のすべてを処理するsystemでアプリを起動するのははるかに簡単です。 (実行パスを注入している世界の反対側のユーザーについてセキュリティ上の懸念がないと仮定します)。

ランチャーが起動するとすぐにランチャーが終了しない場合は、起動したアプリケーションが終了するまで「ブロックする」かどうか、またはアプリを非同期で起動して実行するかどうかを検討する必要があります並行して。ランチャーは、アプリの戻り値を「待機」して、成功したかどうかをチェックしたり、後で何かを行うこともできます。すべてを行う方法はありますが、必要なものがわからないので詳細には触れません。

短い:ランチャーの唯一の仕事は、あなたのアプリを起動することです場合は、execlを使用してください。ランチャーがそれ以上の処理を行う必要がある場合は、systemを使用してください。どちらもあなたのニーズに合っていない場合は、ランチャーが書かれている言語から始めて、より多くの情報を提供する必要があります。

PS。どちらも一般性と移植性という利点があります。彼らはGUIやコマンドラインアプリケーションで動作し、Unixライクなシステムでも、Windowsではある程度機能します。そう簡単に何かのために自分自身をココアにロックする必要はありません。

0

あなたはココアを使用している場合、あなたはNSWorkspace-launchApplication:を使用することができます。 NSWorkspaces上のOSXのドキュメントから

+1

しかし、どのように私たちのために最適ですか?何が考慮すべきか? – kambi

+0

どういう意味ですか?ちょうどこのメソッドを使用して... – edc1591

0

  • のOpenFile:指定されたファイルは、その種類に関連付けられたデフォルトのアプリケーションを使用して指定開きます。
  • openURL:指定したURLの場所を開きます。

urlを使用すると、ftpやhttpなどのファイルも開くことができます。

関連する問題