正文

在工作中,曾经遇到过一个问题。

有一个 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

如何获取比 dism.log 更详细的日志的更多相关文章

  1. 获取Tomcat更详细的日志

    前言 有时候tomcat报错未详细,未能定位到原因. 解决方法: 获取更详细的日志,以便调试. 详细步骤:   获取详细的日志,方法如下: 在WEB-INF/classes目录下logging.pro ...

  2. 微信小程序 报错 “对应的服务器无效。控制台输入 showRequestInfo()可以获取更详细信息”

    之前做的项目突然无法读出数据了,一测试发现报这个错误==>对应的服务器无效.控制台输入 showRequestInfo()可以获取更详细信息,后来发现是SSL证书到期了.重新申请了一个证书,免费 ...

  3. 获取异常具体信息 尤其是运行时异常例如NullPointerException 比e.getMessage()更详细

    ///打印异常信息 尤其是运行时异常 比getMessage()更详细public static String getMessageInfo(Exception e){ OutputStream op ...

  4. python3获取指定目录内容的详细信息

    不同平台获取指定目录内容的详细信息命令各不相同: Linux中可以通过ls -al获取获取 windows中可以通过dir命令获取 下面是我写的一个通用获取目录内容详细信息的python3脚本: #! ...

  5. Nginx配置中的log_format用法梳理(设置详细的日志格式)

    nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式:另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,可以参加ngx_http_log_mo ...

  6. Linux /var/log下的各种日志文件详解

    1)/var/log/secure:记录登录系统存取数据的文件;例如:pop3,ssh,telnet,ftp等都会记录在此. 2)/var/log/wtmp:记录登录这的信息记录,被编码过,所以必须以 ...

  7. aliyun 日志服务(Log Service,Log)是针对日志场景的一站式服务

    日志服务(Log Service,Log)是针对日志场景的一站式服务,在阿里巴巴集团内部被广泛使用.用户无需开发就能快捷完成日志生命周期中采集.消费.投递以及查询功能. 日志服务当前提供如下功能 日志 ...

  8. Docker 1.13.0 详细更新日志

    本文讲的是Docker 1.13.0 详细更新日志[编者的话]Docker发布1.13.0版本,此次版本更新内容较多,以下为该版本具体的变更. 构建 添加在构建时可以指定镜像用作高速缓存源的功能. 这 ...

  9. SQLServer2005删除log文件和清空日志的方案

    数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间.SQL Server数据库都有log文件,log文件记录用户对数据库修改的操作.可以通过直接删除log文件和清空日 ...

随机推荐

  1. Creating a Store Locator with PHP, MySQL & Google Maps(保存地图坐标 经纬度方法 google mysql)

    Google Geo APIs Team August 2009 This tutorial is intended for developers who are familiar with PHP/ ...

  2. 无法导入要素类到SDE中

    我遇到的原因的表空间不足(并且表空间没有设置为自动增长) 首先通过SELECT FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FIL ...

  3. Python 对cookies的处理——urllib2

    import urllib2 import cookielib cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2 ...

  4. Go语言入门教程(十)之函数

    Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...

  5. 初识TDD

    什么是 TDD ? TDD 有广义和狭义的区分. 广义角度指的是 ATDD(Acceptance Test Driven Development),包括 BDD(Behavior Driven Tes ...

  6. Spring Cloud Feign 性能优化

    #### 1.替换 tomcat 首先,把 tomcat 换成 undertow,这个性能在 Jmeter 的压测下,undertow 比 tomcat 高一倍 **第一步,pom 修改去除tomca ...

  7. Spring Boot (十五): 优雅的使用 API 文档工具 Swagger2

    1. 引言 各位在开发的过程中肯定遇到过被接口文档折磨的经历,由于 RESTful 接口的轻量化以及低耦合性,我们在修改接口后文档更新不及时,导致接口的调用方(无论是前端还是后端)经常抱怨接口与文档不 ...

  8. x509: certificate is valid for 10.96.0.1, 172.18.255.243, not 120.79.23.226

    服务器:阿里云服务器 master:120.79.23.226 node:39.108.131.246 系统:Centos 7.4 node节点加入集群中是报错: x509: certificate ...

  9. Roadmap of FE

    未完待补充......

  10. 一次对php大马的后门的简单分析

    有人分享了一个php大马(说是过waf),八成有后门,简单分析了一次 <?php $password='Shiqi';//登录密码(支持菜刀) //----------功能程序--------- ...