前言(蛋疼的背景故事)

  前段時(shí)間,接了一個(gè)小項(xiàng)目,有個(gè)需求是要在系統(tǒng)待機(jī)一段時(shí)間以后,循環(huán)播放 MV(類似于 Windows 系統(tǒng)的屏幕保護(hù))。

  聽到這個(gè)需求,我首先想到的是 MediaPlayer 和 Flash,因?yàn)檫@兩個(gè)組件幾乎所有 Windows 平臺(tái)的電腦都會(huì)安裝。但客戶說不能用 Flash,原因是以前使用過,太不穩(wěn)定,所以我決定使用 MediaPlayer。

  MediaPlayer 做為一個(gè) COM 組件可以很方便的加載到 VS 工具箱中,使用的時(shí)候直接拖放到 Form 上,用起來超級(jí)簡單。而且,網(wǎng)上隨便搜一下都有大把的示例。所以,進(jìn)展很順利。。。

  后來,上線幾天以后,問題來了??蛻舴磻?yīng)有一次下午下班,系統(tǒng)運(yùn)行以后忘關(guān)了,第二天早上就只顯示系統(tǒng)桌面,不確定什么時(shí)候“閃退”了。所以他們第二天就專門測(cè)試了待機(jī)問題,然后發(fā)現(xiàn)待機(jī)的時(shí)候很頻繁的會(huì)出現(xiàn)閃退問題。。我當(dāng)時(shí)直覺就是:一堆SB啊,別 TM 網(wǎng)上下載 GHO 鏡象安裝帶著一堆病毒和插件的系統(tǒng),別 TM 裝個(gè)殺毒軟件把老子進(jìn)程給殺掉(因?yàn)槲覝y(cè)試的時(shí)候程序里的某段操作代碼被360當(dāng)成病毒殺了,我以為也是殺毒軟件的問題)。

  我抱著對(duì) Microsoft 無比信任的情懷,一邊默默罵著SB,一邊讓他們用官方的 ISO 重裝系統(tǒng)。并且要求不要安裝殺毒軟件或者在殺毒軟件里把我的程序設(shè)為信任。同時(shí),我重新檢查了一下系統(tǒng)里的所有方法,確保所有的操作都都異常處理,并且,增加了 Application 級(jí)的異常處理。。然而,沒什么卵用。

  無奈,去現(xiàn)場調(diào)查。。他們果然沒有忽悠我,正當(dāng)我舒服的靠在椅子上欣賞我喜歡的那首MV的時(shí)候,程序沒了,就那樣直接沒了,連一個(gè)錯(cuò)誤消息都沒有。做 .NET 這么久,一直信賴的異常處理機(jī)制竟然沒起作用。。那感覺,就好像冬天的大早上突然被人掀了被子那樣的渴求溫暖,就好像脫光了正和妹子纏綿的時(shí)候妹子突然消失了的那種空洞。。。

  后來,和他們仔細(xì)的確認(rèn)了一下問題出現(xiàn)的頻率。他們說這個(gè)問題出現(xiàn)的時(shí)間不定,有時(shí)候三四個(gè)小時(shí),有時(shí)候六七個(gè)小時(shí)。有時(shí)候報(bào)錯(cuò)“***.exe 已停止運(yùn)行”,有時(shí)候啥都沒有,直接程序界面就消失了,仿佛從來沒有啟動(dòng)過似的。。他們?cè)?jīng)換了一臺(tái)電腦測(cè)試,問題更甚,有時(shí)候半個(gè)小時(shí)就會(huì)崩潰一次。

  程序直接消失,異常捕獲的代碼肯定是沒有執(zhí)行,事實(shí)上也是,Log 都是突然中斷,沒有任何異常和關(guān)閉邏輯的日志。深入調(diào)查時(shí),發(fā)現(xiàn)更奇葩的情況是這個(gè)錯(cuò)誤連系統(tǒng)日志都不一定記錄。。聽他們反應(yīng)這兩天系統(tǒng)閃退過七八次,但是系統(tǒng)里關(guān)于這個(gè)應(yīng)用的日志只有三條,而且沒有剛才我看到的那次閃退的任何日志記錄。。只是在其中一個(gè)錯(cuò)誤記錄里,查到的錯(cuò)誤代碼說是“組件異?!薄?。組件,那只有 MediaPlayer 了。。。

  百度、Google、Bing、360搜索,然而并沒有什么卵用。。網(wǎng)上大多是對(duì) MediaPlayer 組件的介紹和易用性、便捷性的贊美,就是那種能教會(huì)小白們寫一個(gè)簡單的播放窗體的那種滿滿的成就感,一點(diǎn)深入的線索都沒找到。。

  無奈,決定放棄 MediaPlayer。

  后來,找到了一個(gè)博客中介紹的 VLC Player(不過我忘了具體是哪位前輩的文章了)。

  按博客里的介紹,下載了組件,寫了一個(gè)簡單的Demo,然后加入系統(tǒng),運(yùn)行起來貌似好多了。只是后來他們反應(yīng)有一個(gè) MV 播放到某個(gè)時(shí)間點(diǎn)的時(shí)候,會(huì)報(bào)錯(cuò),又查資料,終于在一個(gè)EN文網(wǎng)站上查到原因說是版本問題,下載最新的 VLC Player ,拿到最新的庫使用就行了。

  然后,下載了 VLC Player ,安裝,在安裝目錄里找到最新的