簡體   English   中英

可執行文件是否總是在MacOS上打開終端窗口?

[英]Do executable files always open a terminal window on MacOS?

我在MacOS X上,對於應用程序捆綁類型的東西還很陌生。 我正在編寫一個打開窗口並注冊鼠標輸入的程序-而不是命令行工具。 當我將代碼(用C編寫,如果很重要)編譯為可執行文件(“ unix可執行文件”),然后直接運行該文件(例如,雙擊該文件)時,將彈出一個終端窗口,然后然后程序窗口彈出。 同樣,如果我導航到可執行文件的目錄並從命令行打開它,則它會先打開/ another /終端窗口,然后是程序窗口。

但是,如果我將可執行文件打包成一個包(因此,我想將其變成一個適當的“應用程序”),那么當我通過雙擊或從命令行運行該應用程序時,該程序的窗口將打開且沒有新窗口終端窗口已創建。 這僅僅是“應用程序捆綁包”體系結構的一個屬性嗎? 還是有一種方法可以運行原始可執行文件而不會引起另一個終端窗口? 我懷疑我誤解了一些基本知識。 提前致謝!

我相信您所看到的是正確的。 為了不彈出單獨的窗口,您需要將其封裝到一個包中。

雙擊捆綁包或使用Terminal中的“ open”命令啟動 ,將使用Apple的Launch Services ,其中維護了已知(注冊)應用程序的列表。 將應用程序(捆綁包)引入系統后,它會在Launch Services中注冊並與其URI(例如com.apple.calculator)相關聯,該URI出現在捆綁包的Info.plist中

Info.plist中的其他項告訴啟動服務如何處理應用程序,例如檢查是否已超過操作系統的最低或最高版本,或者是否顯示停靠項。

一個單獨的二進制文件沒有關聯的Info.plist清單,因此其行為無法更改,並且打開了Terminal窗口。

原始可執行文件在本質上被Launch Services(當您打開內容時Finder,Dock和open命令使用的框架)視為文檔。 處理此類文檔的應用程序是Terminal。 因此,當您以這種方式打開可執行文件時,如果可執行文件尚未運行,它將啟動Terminal並告訴其打開文檔。 終端通過打開一個新的shell窗口並以命令行自動鍵入“文檔”的路徑來實現此目的。

Launch Services還可以處理捆綁的應用程序。 如果該應用程序已經在運行,則將其激活,並可能會打開一個新的無標題窗口。 否則,它將啟動它。

正如Rob Napier在評論中指出的那樣,如果直接從命令行運行可執行文件(或者如果某些已經在運行的應用程序使用NSTask或fork + exec啟動它),它將簡單地運行。 不會涉及啟動服務,因此不會要求終端將可執行文件作為文檔打開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM