バンドルとして構築したアプリケーションがあり、別のプロセスから起動したいと考えています。
どうすればいいですか?私が理解していることから、openUrls()、openFile()、または execve() を使用できますが、どちらが適しているかわかりません。
ありがとう
バンドルとして構築したアプリケーションがあり、別のプロセスから起動したいと考えています。
どうすればいいですか?私が理解していることから、openUrls()、openFile()、または execve() を使用できますが、どちらが適しているかわかりません。
ありがとう
あなたはアプリケーションについて話しているので、ファイルの関連付けメカニズムを通過したくありません。適切なアプリケーションでドキュメントや画像などを開くためのものです。あなたは何を尋ねるべきかわからないように思われるので、私はそれを単純にしておくと思います:
exec*
ファミリは実行可能ファイルを直接起動します。ただし、起動プロセスが起動されたアプリケーションに置き換えられることに注意してください。その時点でランチャーは実行を停止します。ランチャーを引き続き実行する場合は、サブプロセスを起動するものを使用します。低レベルの方法の後にはがfork/vfork
続きexec
ますが、アプリを起動する方がはるかに簡単です。これによりsystem
、舞台裏ですべてが処理されます。(実行パスを挿入する世界の反対側のユーザーに関するセキュリティ上の懸念がないと仮定します)。
ランチャーがアプリの起動と同時に終了しない場合は、起動されたアプリケーションが終了するまで「ブロック」するのか、それともアプリを非同期で起動するのかを検討する必要があります。これにより、ランチャーは並行して実行されます。ランチャーは、アプリの戻り値を「待機」して、アプリが成功したかどうかを確認し、後で何かを実行する場合もあります。それをすべて行う方法はありますが、必要なものがわからないため、詳細については説明しません。
つまり、ランチャーの唯一の仕事がアプリの起動である場合は、を使用しますexecl
。ランチャーでさらに多くのことを行う必要がある場合は、を使用してくださいsystem
。どちらもニーズに完全に適合しない場合は、ランチャーが記述されている言語から始めて、より多くの情報を提供する必要があります。
PS。これらは両方とも、一般性と移植性という利点があります。これらはGUIおよびコマンドラインアプリケーションで機能し、Unixライクなシステムで機能し、ある程度はWindowsでも機能します。とてもシンプルなもののためにCocoaに自分を閉じ込める必要はありません。
Cocoa を使用している場合は、 を使用できNSWorkspace
ます-launchApplication:
。
NSWorkspaces のOSX ドキュメントから:
url を使用すると、ftp や http などのファイルを開くこともできます。