2010-07-20 83 views
5

我試圖創建一個Mac應用程序,在某些情況下應該返回一個錯誤代碼。這是英特爾軟件包。 (這是一個碳C++項目,但這可能是不相關的。)從Mac應用程序返回代碼

在C++中執行它的標準方法是讓主函數返回值,這就是我所做的,所以我認爲該部分是正確的。 (我也嘗試明確呼籲exit(42)

問題是:我該如何得到這個值?

當我從終端啓動應用程序open myapp時,即使我總是返回不同的數字,返回值始終爲0。 (使用echo $?進行檢查)

這是來自open命令的返回值,是我的應用程序的返回值被吞噬了嗎?

我也總是得到一個0返回碼,如果我從其他程序使用execve(這是如何指定要使用的應用程序)啓動它。

是否有可能從應用中檢索返回代碼?

旁註:我需要程序捆綁在一起。

回答

2

我想你可能需要直接執行應用程序二進制,即深入到包這樣的:

$ /Applications/Address\ Book.app/Contents/MacOS/Address\ Book

+0

我正在那樣做。它沒有幫助。 – darklon 2010-07-20 12:58:39

+1

'open your.app'和執行'your.app/Contents/MacOS/yourApp'是有區別的。前者不給出應用程序的返回碼,但後者的確如此。這就是保羅寫的。 – Yuji 2010-07-20 22:05:39

+0

我明白了,這是一個好主意。實際上只有後者似乎與execve()一起工作,但返回代碼似乎沒有到達,當我用wait()等待進程時,得到0,而不是用exit()返回的結果。我也嘗試過與終端,我也得到了0。 – darklon 2010-07-20 22:49:30

1

你可能無法做到這一點,因爲你的主會返回一個NSApplicationMain()對象。程序的結束由用戶決定,當他們選擇點擊「退出」按鈕時。

但是,您可以使用applicationWillTerminate方法來做你想做的。

+0

該問題已經發生,沒有創建一個NSApplicationMain對象。一個幾乎不做任何事情的應用程序的返回值似乎已經丟失了。調用退出(價值)也不明確地解決問題。 – darklon 2010-07-20 21:38:15

+0

也似乎沒有一種方法來指定applicationWillTerminate中的返回碼(如果是這樣,那可以解釋0返回值來自哪裏)。無論我從applicationWillTerminate還是代碼中的其他任何地方調用exit()都不會有什麼區別 - 儘管我可能會試試這個,感謝這個想法! – darklon 2010-07-20 21:46:13

+0

Btw。 NSApplicationMain實際上是一個函數,而不是一個類。那裏有一個問題 - 它永遠不會回來。但這不是問題。 – darklon 2010-07-20 22:12:30