正文

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

有一个 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. 制作你的第一个dockerfile文件

    From this lesson you will从这里你将学到1,Make a Dockerfile制作一个Dockerfile2,Build a Docker Image and run构建镜像并 ...

  2. 实现一个3D图片轮播插件 —— 更新版

    前言:     前段时间写下了之前那篇 3D图片轮播效果,后来发现了 Pedro Botelho 写的jquery.gallery.js ,于是重新修改了自己的这个图片轮播,使之可以成为一个插件来使用 ...

  3. 文本数据IO操作--字符流

    一.Reader和Writer 1. 字符流原理 Reader是所有字符输入流的父类而Writer是所有字符输出流的父类.字符流是以字符(char)为单位读写数据的.一次处理一个unicode.字符流 ...

  4. scalikejdbc 学习笔记(4)

    Batch 操作 import scalikejdbc._ import scalikejdbc.config._ object BatchOperation { def main(args: Arr ...

  5. yii2 对字段 自动加一 或 减一

    用于数字类型,将值进行 累加 或者 累减 $count = 1, 就是加一 .   $count = -1, 就是减一 . $effect =  Model::updateAllCounters( [ ...

  6. win10安装python

    下载地址:https://www.python.org/downloads/release/python-365/ 安装完成后,在cmd里输入  python ,检查是否安装成功

  7. Nginx开启Gzip压缩提升页面加载速度

    1.在 nginx 的conf 目录下新建 gzip.conf 文件 #开启gzip压缩 gzip on; #设置允许压缩的页面最小字节数 gzip_min_length 1k; #申请4个单位为16 ...

  8. 深入理解SpringCloud之Gateway

    虽然在服务网关有了zuul(在这里是zuul1),其本身还是基于servlet实现的,换言之还是同步阻塞方式的实现.就其本身来讲它的最根本弊端也是再此.而非阻塞带来的好处不言而喻,高效利用线程资源进而 ...

  9. ionic3 浏览器端返回

    首屏component.ts文件中使用setupBrowserBackButtonBehavior() { // Register browser back button action(s) wind ...

  10. 04-10 Bagging和随机森林

    目录 Bagging算法和随机森林 一.Bagging算法和随机森林学习目标 二.Bagging算法原理回顾 三.Bagging算法流程 3.1 输入 3.2 输出 3.3 流程 四.随机森林详解 4 ...