家中臺式電腦上的 Windows 7 是在前年剛買的時候裝的,一直沒有重裝。在這期間沒有使用任何第三方優化軟件,但運行起來一切正常。這說明只要使用得當,Windows 完全可以很穩定的長期運行,不需要定期重裝,也不需要使用優化軟件。
不過,這個系統最近出了一點問題,每天都會有 mcupdate.exe 這個進程產生異常,無法正常執行。
由于當前系統中安裝有 Visual Studio,因此在產生異常時會彈出是否使用 Visual Studio 進行調試的對話框。
mcupdate.exe 是 Windows Media Center 組件(包含在Win7家庭高級版以上版本中)的更新程序,用于檢測更新微軟為媒體中心提供的在線服務和電視節目指南等內容。例如“互聯網視頻”功能本身不包含在 Windows 中,是通過 mcupdate.exe 網絡更新的方式安裝到系統中的。
如果用戶沒有運行過 Windows Media Center,該更新程序并不會運行;如果用戶曾經運行過 Windows Media Center,那么他會被 Windows “任務計劃”周期性的調用執行。這也就是為什么每天都會發生一次異常。
所幸 Windows Media Center 是基于 Microsoft .NET Framework 開發的,由于運行的是 MSIL 代碼而不是直接以二進制代碼運行,所以在沒有對代碼進行混淆和加密的情況下,可以很方便的進行調試。開始調試后可以直接看到錯誤的原因:
Failed to recover store: C:ProgramDataMicrosofteHomemcepg2-1.db
意思是無法還原 Windows Media Center 的電視節目指南數據庫 mcepg2-1.db 文件。先打開文件所在位置看一下有何異常,文件好好的在那里,看起來一切正常啊。沒關系,繼續在Visual Studio中查看異常信息,點擊“查看詳細信息…”,可以看到如下內容:
原來,出發這個異常的原因是另外一個異常:Could not open file stream: [c:programdatamicrosoftehomeCounter.mem]. Error code: 5. 無法打開文件 Counter.mem,而實際上這個文件我可以正常打開。
不過,想到 mcupdate.exe 是由任務計劃程序啟動而不是由用戶啟動的,所以其使用的用戶帳戶應該是系統服務帳戶,而不是管理員用戶帳戶,可能是由于NTFS權限的原因,導致系統服務帳戶不能打開這個文件。對比查看這兩個文件的屬性和 mcupdate.exe 的帳戶權限信息,內容如下:
果然,該程序以 NETWORK SERVICE 帳戶身份運行(隸屬于Users組),而發生訪問錯誤的文件只允許Users組賬戶具有讀取權限。為Users用戶組手動分配讀寫權限之后,在系統的任務計劃程序庫中找到 mcupdate 任務,手動運行它,果然工作正常,再也沒有出現異常提示:
但我認為,這兩個文件的權限一定是被修改了,才會導致這樣的問題。那他們的默認權限究竟是怎樣的呢?一種方法是從其他正常的系統中查看一下這里的文件權限,另外還可以嘗試一下把他們刪除掉,看程序能否自動創建他們,如果可以,那一定可以為他們分配一個正確的NTFS訪問權限列表。
為了保險起見,把 C:programdatamicrosofteHome 文件夾備份了一下,然后整個刪除掉,再手動運行 mcupdate 任務,果不其然,程序自動新建了一個 ehome 文件夾,看看其文件夾權限,原來是這樣的:
并且,ehome 文件夾下的文件全都繼承了它的權限列表,因此現在應該不會有問題了。
為何該文件夾的權限被修改,我沒有去深究,但是這個問題啟發我在以后的排錯過程中應當包含對訪問權限的測試和檢查,有時候即使文件的其他方面沒有任何問題,錯誤的訪問權限也會帶來一些麻煩,所以奉勸大家以后也不要隨便修改系統文件和文件夾的NTFS權限,說不定下次出問題就沒這么容易排查了。
上一篇 網頁CSS背景圖片使用的測試結果
下一篇 百度不更新網站快照與解決方法