2012-05-21 54 views
1

在我的可可應用程序中,我必須調用system()函數來啓動外部應用程序。我使用的命令是:system()call in cocoa app

system("./main &"); 

如果我從運行Xcode中的應用程序,它工作得很好,因爲我知道的文件夾放在哪裏爲主。

如果我創建一個檔案,並分發我的.app應用程序,system()找不到「main」。我必須把它放在哪裏?否則,當我不在應用程序所在的文件夾中時,如何使用「./」運行應用程序?

編輯:也許我解決了使用NSTask,但我怎樣才能在後臺運行「主」?現在它在一個新的終端窗口中打開。

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

感謝

+1

請注意,您不能在運行時對工作目錄做任何假設,因此您需要完整路徑。 –

回答

1

嘗試附加可執行文件的名稱前的完整路徑,並用它作爲參數傳遞給system。請注意,system是實現定義的 - 它的行爲不保證在系統中相同,因此不推薦使用它。你應該找一個合適的替代品,如NSWorkspace

1

雖然dirkgently的回答是直接正確的,但真正的答案卻更復雜。

首先,NSTask不是通用的命令行調用程序。這就是爲什麼加入&不符合你的期望。實際上,通過NSTask調用的所有任務都是有效的背景。

但你真的不想使用NSTask。你應該真的使用XPC服務。現在,如果您的目標是在您的程序退出後仍然運行,那麼您應該查看LaunchServices。