1

私のココア アプリでは、system() 関数を呼び出して外部アプリを起動する必要があります。私が使用するコマンドは次のとおりです。

system("./main &");

アプリを Xcode から実行すると、main を配置するフォルダーがわかっているため、正常に動作します。

アーカイブを作成して .app アプリケーションを配布すると、system() は「メイン」を見つけることができません。どこに置けばいいの??または、アプリケーションがあるフォルダーにいないときに、「./」を使用してアプリを実行するにはどうすればよいですか?

編集:おそらくNSTaskを使用して解決しましたが、バックグラウンドで「メイン」を実行するにはどうすればよいですか? これで、新しいターミナル ウィンドウが開きます。

NSTask *task = [[NSTask alloc] init]; 
[task setLaunchPath:@"/Applications/Multibo/main"]; 
[task setArguments:[NSArray arrayWithObjects:[NSString stringWithFormat:@"./main &"], nil]]; 
[task launch];

ありがとう

4

2 に答える 2

1

dirkgently の答えは直接正しいですが、実際の答えはもっと複雑です。

まず、NSTask一般的なコマンド ライン インボーカーではありません。そのため、追加&しても期待どおりの結果が得られません。実際、経由で呼び出されるすべてのタスクNSTaskは事実上バックグラウンドです。

しかし、あなたは本当に NSTask を使いたくありません。XPC サービスを実際に使用する必要があります。目標がプログラムの終了後も実行されるものである場合は、LaunchServices を検討する必要があります。

于 2012-05-21T17:54:33.643 に答える
1

実行可能ファイルの名前の前にフル パスを追加し、それを への引数として使用してみてくださいsystemsystem実装で定義されていることに注意してください。その動作はシステム間で同じであるとは保証されていないため、その使用は推奨されません。などの適切な代替手段を探す必要がありますNSWorkspace

于 2012-05-21T13:54:25.437 に答える