如何獲取比 dism.log 更詳細的日志


正文

在工作中,曾經遇到過一個問題。

有一個 component,名字叫做 Oxford Adaptive Learning Dictionary,是一款牛津詞典的應用。這個 component,需要安裝在 Windows 10 的系統上。這個應用屬於 UWP 應用,用行話來講,叫做 Modern App。Modern App 是區別於 Win32 App 的一種應用(按照我的理解,在 Win8 和 Win8.1 之后,才有了 “應用” 這一說法,在這之前,我們都把他們叫做 “軟件”),它采用的是 沙盒機制,其程序文件是無法訪問的(使用管理員賬戶也無法訪問)。要打開這一應用,只有通過開始菜單的 All App 中的圖標;要卸載這一應用,可以通過在 All App 中郵件選擇卸載,或者在 Apps & Features 中,找到這一應用以后選擇卸載。(Win32 程序的卸載方式可以通過 Program and Features,Modern App 不會在其中出現)

 

背景介紹完了以后,我來描述一下所遇到的問題。Oxford Dictionary 的安裝文件的后綴名是 appxbundle,通過 dism /online /Add-ProvisionedAppxPackage 命令來安裝。在 dism 的命令顯示 “操作成功完成” 之后,發現在 All Apps 里面有了 Oxford Dictionary 的圖標,但是在 Apps & Features 里面卻沒有發現 Oxford 這一項。這點十分蹊蹺,看起來像是 Oxford 沒有成功安裝。
在 All Apps 里面點擊 Oxford,發現應用的圖標下面出現了類似進度條的物件,Oxford 詞典無論如何都無法啟動。問題出現了:Oxford Dictionary 無法安裝!
但是,dism /online /Add-ProvisionedAppxPackage 不是顯示 “操作成功完成” 了嗎?於是,試圖從 dism 的 log 中尋找原因。
dism.log 的路徑是 C:\Windows\Logs\DISM\dism.log。打開這個日志后,發現所有的命令的執行結果都是 Info 或者 Warning 類型,沒有 Error;而且 dism.log 也顯示 Add-ProvisionedAppxPackage 命令成功完成。這條路被堵死了。


休息一下以后,回來再次思考這個問題。可以確定的是,Oxford Dictionary 一定沒有安裝成功,因為如果安裝成功,那么一定可以啟動這個應用。但是 dism.log 顯示命令的執行是成功的。於是 debug 的思路是:能否找到比 dism.log 更詳細的安裝日志?

於是我請教了某一位同事,在他的幫助下,成功解決了這一問題!以下是解決步驟。

第一步,找到 “事件查看器” Event Viewer,保存 “Windows 日志” 下面的條目,例如:應用程序、系統等等。將這些日志保存下來,是為了做比較。所以,在安裝 Oxford 之前,保存一次;在安裝 Oxford 之后,再保存一次。這樣就可以比較前后兩次日志的不同之處了。

后來知道,其實,像 Oxford 之類的應用的安裝日志在 系統 日志中。

 

 

 

第二步,使用 Beyond Compare,比較前后日志的不同。可以查找關鍵字如 “Oxford” 或者其他相關的關鍵字。

如下圖所示,發現了不同之處。在 C:\Windows\Temp\AppXDeploymentServer_E33F44D0-B47D-0001-276B-3FE37DB4D101.evtx 中記錄了與 Oxford 安裝相關的日志。由此順藤摸瓜,繼續尋找原因。

 

 

第三步,根據進一步的分析,事件查看器中類似 Oxford 的安裝日志的位置是 C:\Windows\System32\winevt\Logs\Microsoft-Windows-AppXDeploymentServer%4Operational.evtx,當然也可以直接在事件查看器的 Windows 日志下點擊 系統 來查看。如下圖所示是直接打開日志文件並且搜索 Oxford 的結果,這就是 比 dism.log 更詳細的安裝日志!

 

 

出錯原因分析:其實出錯原因很簡單,在安裝 Oxford Dictionary 時,需要指定 DependencyPackagePath。如果沒有指定,而且目標機器上沒有依賴的庫文件的話,安裝就會失敗。這也解釋了為什么在某些 Win10 機器上可以安裝,而某些機器不可以。

完整的 Oxford Dictionary 安裝命令,如下所示:

dism.exe /online /Add-ProvisionedAppxPackage /PackagePath:"c:\OxfordUniversityPressh.4488779F267

 

小結

通過這次問題解決的過程,知道 Windows 10 或者 Windows 8.1 的系統,使用 dism /online /Add-ProvisionedAppxPackage 命令會在 C:\Windows\Logs\DISM\dism.log 中生成日志。並且,更詳細的日志,可以通過 事件管理器->Windows 日志->系統 來查看,或者打開 C:\Windows\System32\winevt\Logs\Microsoft-Windows-AppXDeploymentServer%4Operational.evtx 來查看。

后記

當時我去請教的同事,我們可以叫他 Robell。他對 dism,PowerShell,DOS Script,VB Script 等有比較深的造詣。在這之后不久,他離開了 HP。寫這篇文章,也是為了順便紀念他。^^

 

創作日期:7/29/2016 11:18:38 AM

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM