在工做中,曾經遇到過一個問題。bash
有一個 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 不會在其中出現)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
命令成功完成。這條路被堵死了。ssh
休息一下之後,回來再次思考這個問題。能夠肯定的是,Oxford Dictionary 必定沒有安裝成功,由於若是安裝成功,那麼必定能夠啓動這個應用。可是 dism.log 顯示命令的執行是成功的。因而 debug 的思路是:可否找到比 dism.log 更詳細的安裝日誌?spa
因而我請教了某一位同事,在他的幫助下,成功解決了這一問題!如下是解決步驟。debug
第一步,找到 「事件查看器」 Event Viewer,保存 「Windows 日誌」 下面的條目,例如:應用程序、系統等等。將這些日誌保存下來,是爲了作比較。因此,在安裝 Oxford 以前,保存一次;在安裝 Oxford 以後,再保存一次。這樣就能夠比較先後兩第二天志的不一樣之處了。日誌
後來知道,其實,像 Oxford 之類的應用的安裝日誌在 系統 日誌中。code
第二步,使用 Beyond Compare,比較先後日誌的不一樣。能夠查找關鍵字如 「Oxford」 或者其餘相關的關鍵字。component
以下圖所示,發現了不一樣之處。在 C:\Windows\Temp\AppXDeploymentServer_E33F44D0-B47D-0001-276B-3FE37DB4D101.evtx
中記錄了與 Oxford 安裝相關的日誌。由此順藤摸瓜,繼續尋找緣由。blog
第三步,根據進一步的分析,事件查看器中相似 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