前言(蛋疼的背景故事)
前段時間,接了一個小項目,有個需求是要在系統(tǒng)待機一段時間以后,循環(huán)播放 MV(類似于 Windows 系統(tǒng)的屏幕保護)。
聽到這個需求,我首先想到的是 MediaPlayer 和 Flash,因為這兩個組件幾乎所有 Windows 平臺的電腦都會安裝。但客戶說不能用 Flash,原因是以前使用過,太不穩(wěn)定,所以我決定使用 MediaPlayer。
MediaPlayer 做為一個 COM 組件可以很方便的加載到 VS 工具箱中,使用的時候直接拖放到 Form 上,用起來超級簡單。而且,網上隨便搜一下都有大把的示例。所以,進展很順利。。。
后來,上線幾天以后,問題來了??蛻舴磻幸淮蜗挛缦掳?,系統(tǒng)運行以后忘關了,第二天早上就只顯示系統(tǒng)桌面,不確定什么時候“閃退”了。所以他們第二天就專門測試了待機問題,然后發(fā)現待機的時候很頻繁的會出現閃退問題。。我當時直覺就是:一堆SB啊,別 TM 網上下載 GHO 鏡象安裝帶著一堆病毒和插件的系統(tǒng),別 TM 裝個殺毒軟件把老子進程給殺掉(因為我測試的時候程序里的某段操作代碼被360當成病毒殺了,我以為也是殺毒軟件的問題)。
我抱著對 Microsoft 無比信任的情懷,一邊默默罵著SB,一邊讓他們用官方的 ISO 重裝系統(tǒng)。并且要求不要安裝殺毒軟件或者在殺毒軟件里把我的程序設為信任。同時,我重新檢查了一下系統(tǒng)里的所有方法,確保所有的操作都都異常處理,并且,增加了 Application 級的異常處理。。然而,沒什么卵用。
無奈,去現場調查。。他們果然沒有忽悠我,正當我舒服的靠在椅子上欣賞我喜歡的那首MV的時候,程序沒了,就那樣直接沒了,連一個錯誤消息都沒有。做 .NET 這么久,一直信賴的異常處理機制竟然沒起作用。。那感覺,就好像冬天的大早上突然被人掀了被子那樣的渴求溫暖,就好像脫光了正和妹子纏綿的時候妹子突然消失了的那種空洞。。。
后來,和他們仔細的確認了一下問題出現的頻率。他們說這個問題出現的時間不定,有時候三四個小時,有時候六七個小時。有時候報錯“***.exe 已停止運行”,有時候啥都沒有,直接程序界面就消失了,仿佛從來沒有啟動過似的。。他們曾經換了一臺電腦測試,問題更甚,有時候半個小時就會崩潰一次。
程序直接消失,異常捕獲的代碼肯定是沒有執(zhí)行,事實上也是,Log 都是突然中斷,沒有任何異常和關閉邏輯的日志。深入調查時,發(fā)現更奇葩的情況是這個錯誤連系統(tǒng)日志都不一定記錄。。聽他們反應這兩天系統(tǒng)閃退過七八次,但是系統(tǒng)里關于這個應用的日志只有三條,而且沒有剛才我看到的那次閃退的任何日志記錄。。只是在其中一個錯誤記錄里,查到的錯誤代碼說是“組件異?!?。。組件,那只有 MediaPlayer 了。。。
百度、Google、Bing、360搜索,然而并沒有什么卵用。。網上大多是對 MediaPlayer 組件的介紹和易用性、便捷性的贊美,就是那種能教會小白們寫一個簡單的播放窗體的那種滿滿的成就感,一點深入的線索都沒找到。。
無奈,決