2013-03-16 69 views
5

我成功使用System.Diagnostics.Process.Start()在Windows上啓動我的外部mono可執行文件。但它在Mac上失敗。我沒有得到任何錯誤,根本就沒有發生任何事情。用c在mac上啓動外部進程#

我試着做以下方式:

System.Diagnostics.Process.Start("mono", "/path/program.exe"); 

而且我試着打開終端類似下面的(這也失敗了):

System.Diagnostics.Process.Start("Terminal"); 

我能夠做的唯一的事情按以下方式啓動終端:

System.Diagnostics.Process.Start("open", "-a Terminal"); 

任何想法?我真的很感激任何幫助。

謝謝!

+0

看到我的答案... – 2013-03-22 13:16:49

+0

@ konrad.kruczynski這對我不起作用。實際上我甚至嘗試在「/Libraries/Frameworks/Mono.framework/Versions/2.*/bin/mono」上啓動實際的mono可執行文件。該文件存在於此處,但對其調用System.Diagnostics.Process.Start完全不起作用。我能夠使用Process.Start啓動的唯一一件事是「打開 - 一個終端」。 – 2013-03-23 14:43:08

+0

它對我來說工作正常,猜測它是一個錯誤(或舊的單聲道版本或類似的東西)。不要猶豫,在這裏創建一個錯誤報告:http://bit.ly/qFa0pT – 2013-03-24 14:59:16

回答

9

你需要做的是使用實際可執行文件的完整路徑。在OSX上,「應用程序」實際上是特殊結構的文件夾,其擴展名爲.app,可執行文件(通常)位於Content/MacOS/[name]之下。

例如,打開終端:

System.Diagnosticts.Process.Start("/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal"); 

或爲文字編輯:

System.Diagnostics.Process.Start("/Applications/TextEdit.app/Contents/MacOS/TextEdit"); 

要找到可執行文件,你可以右鍵單擊(或控制單擊)一個應用程序,並選擇顯示包裝內容,這將打開Finder中的實際文件夾。然後,您可以導航到Contents/MacOS文件夾以查找實際的可執行文件。

要運行您的單聲道可執行文件,您必須使用mono可執行文件的完整路徑並將您的程序作爲參數傳遞。通常它會像/usr/local/bin/mono或可能/usr/bin/mono

例如:

System.Diagnostics.Process.Start("/usr/bin/local/mono /Users/Ilya/Projects/SomeApp.exe"); 

顯然你會用實際路徑.exe文件,上面只是一個例子。

0

要擴大Bryan答案,請不要硬編碼路徑/usr/bin/local/在您的代碼。

要找出正確的路徑在每個系統中,有各種各樣的技術,但我不知道這是最好的一個:

  • 使用which mono定位的完整路徑。爲此,您需要從另一個Process實例調用which。 (不知道which是否默認在所有Mac系統中都有)
  • 使用pkg-config確定安裝Mono的前綴。但要小心,你不能簡單地調用system的pkg-config,你必須首先檢查mono的pkg-config是否存在。爲此,您需要檢查此硬編碼路徑是否存在:/Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-config(比如here)。
+0

在OS X上,它實際上應該是/Libraries/Frameworks/Mono.framework/Versions/Current/bin/mono - btw。恕我直言,而不是發佈一個單獨的答案,你應該建議編輯這樣的事情,你只是在現有的答案中添加東西。 – 2013-03-18 05:13:21

+0

馬丁,那是隻有當你使用官方安裝程序,但你可能沒有... – knocte 2013-03-18 08:47:24

+0

這是一個很好的觀點。如果這是一個用戶應用程序,我強烈建議'哪個單聲道方法。如果它是一個服務器端,那麼你可能希望將路徑設置爲單聲道配置設置。 – rossipedia 2013-04-13 20:44:06

0

單聲道的鮮爲人知的功能是,您可以直接運行.exe文件(以便與Windows中的操作方式兼容,但也方便)。它使用啓動原始可執行文件的相同Mono VM啓動。換言之可以簡單地做:

Process.Start("Test.exe"); 

嗯,至少它爲我的作品在Linux上;)

編輯:

這裏的source該功能,應在每個工作平臺。

+0

一個重要的注意事項:目標EXE文件需要設置一個可執行的位,否則Mono將拒絕啓動該程序。 – LubosD 2014-06-02 14:54:19