私たちはバンドルとして構築したアプリケーションを持っており、別のプロセスから起動したいと思っています。別のプロセスからアプリケーションを起動する
どうすればよいですか? 私はopenUrls()、openFile()またはexecve()を使用することができますが、 を使用していますが、どちらが良いかわかりません。
おかげ
私たちはバンドルとして構築したアプリケーションを持っており、別のプロセスから起動したいと思っています。別のプロセスからアプリケーションを起動する
どうすればよいですか? 私はopenUrls()、openFile()またはexecve()を使用することができますが、 を使用していますが、どちらが良いかわかりません。
おかげ
アプリケーションについて話しているので、ファイルの関連付けの仕組みを調べる必要はありません。彼らは適切なアプリケーションで文書や画像などを開くためのものです。あなたは何を聞くべきか分からないので、私は単純なままにしておきたいと思います。
exec*
ファミリーは実行ファイルを直接起動します。しかし、は、起動したアプリケーションでの起動プロセスを置き換えることに注意してください。ランチャーはその時点で実行を停止します。ランチャーを実行し続けるには、サブプロセスを起動するものを使用します。低レベルの方法はfork/vfork
に続いてexec
ですが、背中のすべてを処理するsystem
でアプリを起動するのははるかに簡単です。 (実行パスを注入している世界の反対側のユーザーについてセキュリティ上の懸念がないと仮定します)。
ランチャーが起動するとすぐにランチャーが終了しない場合は、起動したアプリケーションが終了するまで「ブロックする」かどうか、またはアプリを非同期で起動して実行するかどうかを検討する必要があります並行して。ランチャーは、アプリの戻り値を「待機」して、成功したかどうかをチェックしたり、後で何かを行うこともできます。すべてを行う方法はありますが、必要なものがわからないので詳細には触れません。
短い:ランチャーの唯一の仕事は、あなたのアプリを起動することです場合は、execl
を使用してください。ランチャーがそれ以上の処理を行う必要がある場合は、system
を使用してください。どちらもあなたのニーズに合っていない場合は、ランチャーが書かれている言語から始めて、より多くの情報を提供する必要があります。
PS。どちらも一般性と移植性という利点があります。彼らはGUIやコマンドラインアプリケーションで動作し、Unixライクなシステムでも、Windowsではある程度機能します。そう簡単に何かのために自分自身をココアにロックする必要はありません。
あなたはココアを使用している場合、あなたはNSWorkspace
の-launchApplication:
を使用することができます。 NSWorkspaces上のOSXのドキュメントから
:
urlを使用すると、ftpやhttpなどのファイルも開くことができます。
奨励金がなかったら、私はこれを閉じると投票します。あなたの質問は非常に曖昧です - あなたはどのスイートがあなたをより良くするかをどのように知っていますか?あなたはあなたの要件についての*どんな*情報も提供していないし、あなたが言及した3つの問題になぜ問題があるのか。 –