上一篇使用MONO在MAC OS上開發——同步處理記錄(一)講述了在MAC OS讀取設定檔以及寫日誌,那麼只算是完成了基本的配置,下面的才是重點。
由於時間關係,就簡單描述下,並不具體分析源碼。最後奉上源碼。
一:安裝
第一步,安裝MONO架構。你可以在MONO官網去下載。注意“MonoFramework-MRE-2.10.5_0.macos10.xamarin.x86.dmg”在低版本MAC OS上運行有問題。建議安裝“MonoFramework-MRE-2.10.4_0.macos10.xamarin.x86.dmg”檔案。
第二步,執行程式。將可執行程式“MonitoringApp”複製到電腦案頭,雙擊運行。
註:在MONO提供的開發工具(MonoDevelop)中,編譯後會產生“MonitoringApp”指令碼。用記事本開啟,就會發現如下代碼:
#!/bin/sh
exec mono "/Users/PRODUCTION/Desktop/App/lib/MonitoringApp/MonitoringApp.exe" "$@"
通過這段AppleScript,就明白了利用MONO在Mac OS上執行.NET程式的原理了,還封裝了一層殼,一層你蛻不掉的殼——通過在終端上啟動並執行AppleScript來啟動MONO虛擬機器,然後運行MonitoringApp.exe。這段AppleScript是通過終端啟動並執行,帶來了以下麻煩:
1)寫死的路徑。比如我將MonitoringApp檔案移動位置,就不能運行了,因為這段指令碼中,路徑是死的。當然你可以去學習AppleScript,然後去搜MonitoringApp.exe檔案,然後執行。但是對於只有3天時間的我,顯然是不可能的。
2)無法脫離終端運行。但是AppleScript啟動的程式無法脫離終端運行。打個比方,你將終端關了,OK,你的程式也關了。這問題當時我一直沒解決,現在想解決,卻沒蘋果電腦測試了。
二:環境配置
第一步,配置設定檔。設定檔名字必須是“Configuration.txt”。本目錄提供了一個參考檔案。具體參數說明如下:
MonitoringDirectoryType:目錄類型,僅支援兩個值(Immediate、Cycle)。Immediate表示即時監控(預設值),Cycle表示周期監控。
Path:監控目錄路徑。必須是存在的路徑。
TargetPath:目標目錄路徑。可以是遠程目錄路徑。不能使用SMB路徑,而應該是用如“/Volumes/mes_data/n81a”的類型。
IncludeSubdirectories:是否涵蓋子目錄。
Filter:過濾字串。如“*”表示監控所有檔案,“*.txt”表示監控所有的文字檔。
BackupPath:備份路徑。
BackupExpired:備份到期時間。單位是天。必須為整數。預設值30天。
CycleMinutes:周期迴圈時間。單位是分。 必須為整數。預設值60分鐘。
注意事項:
1)8個配置缺一不可。必須全部配置,並寫值。
2)支援多個目錄。但是要求所有的值都以多個的形式表示,如“['Immediate','Cycle']”表示兩個目錄,相應的其他配置項也必須寫兩個值。
3)所有的符號必須為英文符號。值必須用單引號括起來。
4)有些值只對某種類型起作用,比如CycleMinutes只對MonitoringDirectoryType為Cycle的類型目錄起作用,因此當目錄類型為Immediate時,值屬於無效狀態。
5)配置名以冒號結束。配置值涵蓋在中括弧中。
6)每個配置項配置完成前,請不要換行。每個配置項之間請換行。程式是按行讀取配置項的。
7)配置名和配置值不區分大小寫。
配置完設定檔後,請將檔案複製到系統使用者的根目錄下。如“/Users/nzocnzoc”。
註:其實上面的都是屁話,具體的你還是自己看代碼吧。值得注意的是,最好你所有的文字都用英文,否則複製過去可能都是亂碼,即使設定了語言為中文也不行。
第二步,配置開機啟動。請先將程式拖入對應使用者的登陸項裡。具體設定在:【系統喜好設定(System Preferences)】->【使用者賬戶(Accounts)】->【登陸項(Login Items)】。然後再串連遠程伺服器。具體配置在【前往】->【串連伺服器】中配置,請使用記住密碼(切記)。配置完畢,然後將目標目錄拖入至目標使用者的登陸項中,如此,就能在開機啟動時自動連接遠程目錄。
注意:由於網線串連或者WIFI串連相對緩慢,在登陸項中,請將遠程目錄的位置盡量移後,以便有充足的時間來緩衝。沒辦法,這是個比較蛋疼的辦法,但是總歸是實現了開機啟動而且連上了遠程目錄。
第三步:重啟電腦,測試是否成功。一定要測試是否檔案能夠上傳到遠程目錄。
三:問題診斷。
如果檔案沒有成功上傳,程式又沒有提供異常提示,請先參考“/Users/目前使用者”路徑下的Data目錄中的錯誤記錄檔。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
其實這個項目代碼倒是很簡單,1天不到就可以寫完,但是移植到Mac OS上問題就來了。很多時候,我們都說MONO可以跨平台,事實上也是可以的,但是問題卻很多。
- 代碼必須全部用英文,包括注釋,否則移植可能會出亂碼。
- 需要在Mac OS上使用MonoDevelop(MONO的開發工具)編譯產生。
- Mac的檔案系統與Window系統很不一樣,使用.NET代碼擷取路徑時,比如程式啟動路徑等均無法擷取。
- MONO for Mac OS不支援控制台應用程式,畫Window應用程式介面最好用Gtk#畫,否則可能介面顯示可能會有問題。如需隱藏介面,最好將寬度和高度設定為0,設定屬性和方法均無效,不知道下個版本會不會修複。
- 注意MONO架構版本問題。有可能最新版本不支援某些代碼或者不支援某些低版本蘋果系統。
筆者在這裡權當是拋磚引玉,如果有朋友也使用過MONO for Mac OS,希望能分享下經驗。
源碼下載:MonitoringApp.7z